Связывание библиотек, содержащих циклические ссылки в GCC - PullRequest
5 голосов
/ 26 января 2011

Я пытаюсь связать приложение с несколькими статическими библиотеками в GCC.

Есть две библиотеки, которые вызывают проблемы. Libsupport предоставляет терминал для приложения. Он полагается на libcpu для обеспечения последовательной связи, синхронизации и синхронизации. Libcpu использует libsupport для организации очередей для последовательных данных и многого другого.

Если я сначала укажу libsupport, то при связывании libcpu нельзя связать с функциями очереди. Разве я указываю libcpu, во-первых, поддержка lib не может связать функции последовательной связи (и более).

Похоже, что GCC анализирует библиотеку только один раз и удаляет все неиспользуемые объекты.

Могу ли я попросить gcc проанализировать библиотеки несколько раз или включить все объекты?

Ответы [ 3 ]

9 голосов
/ 26 января 2011
gcc ... -lsupport -lcpu -lsupport -lcpu

-> Каждое упоминание о библиотеке будет вызывать разрешение библиотек, которые предшествовали ей (но не обязательно те, которые были указаны после), поэтому в будущем вам может потребоваться указать больше «-lsupport -lcpu».

Или попробуйте --start-group -lsupport -lcpu --end-group один раз.

6 голосов
/ 27 января 2011

Здесь - подробное объяснение того, почему в этой ситуации требуется либо повторение библиотек, либо использование --start/--end-group.

2 голосов
/ 26 января 2011

Обычно вы можете указать библиотеку более одного раза, чтобы обойти проблему такого рода, например,

$ gcc ... -lsupport -lcpu -lsupport ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...