Минимальный объем информации, необходимый для создания (динамической) ссылки?
-
19-09-2019 - |
Вопрос
Это вопрос, с которым я сталкивался неоднократно, обычно касающийся подключаемых модулей, но недавно я столкнулся с ним, пытаясь устранить некоторые проблемы с системой сборки.Меня беспокоят в первую очередь системы на базе * nix, но я полагаю, что это относится и к Windows.
Вопрос в том, каков минимальный объем информации, необходимый для выполнения динамической компоновки?Я знаю, что дистрибутивы Linux, такие как Debian, имеют просто 'i686', и этого достаточно.Однако я полагаю, что здесь есть некоторая неявная информация, и я, вероятно, не смогу выполнить динамическое связывание любого общего объекта, пока они скомпилированы с использованием -march=i686
, смогу ли я?
Итак, что должно быть подобрано правильно, чтобы я мог успешно загрузить общий объект?Я знаю, что для c ++ даже компилятор (а иногда и версия) должен совпадать из-за искажения имен, но я отчасти надеялся, что это не относится к c.
Любые мысли приветствуются.
Редактировать:
Ответ Нила заставил меня понять, что на самом деле я говорю не о динамическом связывании, или, скорее, вопрос двоякий,
- что необходимо для статического связывания, и
- что необходимо для динамического связывания
Думаю, я возлагаю больше надежд на первое.
Решение
Ну, как минимум, код должен быть скомпилирован для того же семейства процессоров, и вам нужно знать названия библиотеки и функции.Вдобавок ко всему, вам нужен тот же ABI.Вы должны знать, что, несмотря на то, что думают люди, стандарт C не определяет ABI, и вполне возможно, что два компилятора C (или версии одного компилятора) будут придерживаться стандарта, работать на одной платформе, но иметь разные ABI.
Что касается точного указания деталей архитектуры - я должен признать, что никогда этого не делал.Планируете ли вы распространять двоичные библиотеки на разных вариантах Linux?