lib зависимости и их порядок - PullRequest
2 голосов
/ 12 апреля 2011

время от времени, если мы не перечисляем libs в определенном порядке внутри make-файла, происходит сбой

Причина в том, что определение должно предшествовать его использованию.

Как правильно определить порядок?

Ответы [ 2 ]

4 голосов
/ 12 апреля 2011

На самом деле, при связывании библиотек, использование должно предшествовать определению. Любые неразрешенные символы должны быть известны до обработки файла библиотеки, обеспечивающего их определения.

Что касается заказа, боюсь, вам придется делать это вручную. Если libA зависит от libB (т. Е. LibA использует символы из libB), тогда вы должны сделать ссылку в следующем порядке: -lA -lB.

Это в основном вопрос документации. Хорошо документированная библиотека четко указывает, от каких других библиотек она зависит, поэтому вы можете определить правильный порядок компоновки.

Если вы не хотите читать документацию или нет доступной документации, всегда можно выбрать метод проб и ошибок:)

1 голос
/ 12 апреля 2011

Я тоже нахожу это раздражающим. Я помню, как искал инструмент для сортировки, но не нашел ничего, что могло бы помочь.

Наконец, я решил использовать метод грубой силы: если вы перечислите все свои библиотеки дважды, например, -lA -lB -lA -lB, это гарантирует, что каждая библиотека будет указана до (и после) любой другой библиотеки.

Итак, имея $(LIST) библиотек, вы можете использовать $(addprefix -l,$(LIST) $(LIST)).

Не очень элегантно, несколько замедляет стадию компоновки, но работает.

...