Минимальный объем информации, необходимый для (динамического) связывания? - PullRequest
0 голосов
/ 08 февраля 2010

Это вопрос, с которым я неоднократно сталкивался, обычно касающийся плагинов, но недавно я столкнулся с ним, пытаясь решить некоторые проблемы с системой сборки. Моя проблема в первую очередь связана с системами * nix, но я полагаю, что это относится и к окнам.

Вопрос в том, какой минимальный объем информации необходим для динамического связывания? Я знаю, что в дистрибутивах Linux, таких как Debian, просто i686, и этого достаточно. Тем не менее, я полагаю, что здесь есть некоторая неявная информация, и я, вероятно, не смогу выполнять динамическое связывание какого-либо общего объекта, если он скомпилирован с использованием -march=i686, не так ли?

Так что же должно быть правильно сопоставлено, чтобы я мог успешно загрузить общий объект? Я знаю, что для c ++ даже компилятор (и иногда версия) должен совпадать из-за искажения имени, но я надеялся, что это не относится к c.

Любые мысли приветствуются.

Редактировать :
Ответ Нила заставил меня понять, что я на самом деле не говорю о динамическом соединении, или, скорее, вопрос двоякий,

  1. что нужно для статической компоновки и
  2. что нужно для динамического связывания

Надеюсь, у меня больше надежд на первое.

1 Ответ

2 голосов
/ 08 февраля 2010

Ну, как минимум, код должен быть скомпилирован для того же семейства процессоров, и вам нужно знать имена библиотеки и функции. Кроме того, вам нужен тот же ABI. Вы должны знать, что, несмотря на то, что думают люди, Стандарт C не определяет ABI, и вполне возможно, что два компилятора C (или версии одного и того же компилятора) придерживаются стандарта, работают на одной платформе, но имеют разные АБИС.

Что касается точного указания деталей архитектуры - я должен признать, что никогда не делал этого. Планируете ли вы распространять бинарные библиотеки в разных вариантах Linux?

...