2017-02-23 8 views
0

Я компилирую программу и получаю «неопределенную ссылку» на константу, определенную в файле C в lib1, которая используется в lib2. Я получаю сообщение об ошибке, если я скомпилировать как:Зачем вам иногда нужно перечислить библиотеку дважды для ссылки на C и можно ли ее избежать?

clang myfile.c -L. -L../lib2dir -llib1 -llib2 

Я вспомнил от моих дней Unix, что когда-то вы должны добавить библиотеку снова. Так я и сделал:

clang myfile.c -L. -L../lib2dir -llib1 -llib2 -llib1 

и это связано. Почему это все еще необходимо или я делаю что-то неправильно, и это не должно быть необходимым?

+2

для усмешек вы попробовали lib2 сначала, а затем lib1? а не один или два? –

ответ

2

Библиотеки связаны в том порядке, в котором они размещены в командной строке. Когда библиотека связана, из нее разрешаются только отсутствующие символы. Поскольку символ, который вы упоминаете, находится в lib2, он не будет разрешен с lib1, потому что компоновщик еще не знает, что он понадобится позже. Итак, положите -llib2 перед -llib1.

+0

Спасибо, он работает, если я отменяю их порядок. Я все еще думаю, что компоновщик должен быть достаточно умным, чтобы вернуться и искать его или сохранить список всего, что было в lib1, когда он обрабатывает lib2. – Scooter

+0

Ну ... Это должно. Но это не так. – DyZ

Смежные вопросы