Тест для внешних неопределенных ссылок в Linux - PullRequest
5 голосов
/ 04 мая 2010

Есть ли встроенная утилита linux, которую я могу использовать для проверки вновь скомпилированной общей библиотеки на наличие внешних неопределенных ссылок? Gcc, кажется, достаточно умен, чтобы проверять неопределенные символы в моем собственном двоичном файле, но если символ является ссылкой на другую библиотеку, gcc не проверяет во время ссылки. Вместо этого я получаю сообщение, только когда пытаюсь установить связь с моей новой библиотекой из другой программы.

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

Пример ошибки:

make -C  UnitTests debug
make[1]: Entering directory `~/projects/Foo/UnitTests`
g++ [ tons of objects ] -L../libbar/bin -lbar -o UnitTests
libbar.so: undefined reference to `DoSomethingFromAnotherLibrary`
collect2: ld returned 1 exit status
make[1]: *** [~/projects/Foo/UnitTests] Error 1

1 Ответ

2 голосов
/ 04 мая 2010

Обычно при связывании общих объектов допускаются неопределенные ссылки, но вы можете заставить компоновщик выдавать ошибку, если в объектных файлах, которые вы связываете для создания общей библиотеки, есть неопределенные символы, предоставляя компоновщику -z defs ( или эквивалентно -Wl,-z,defs в команде gcc, которая вызывает компоновщик).

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