символ gcc для отчета без ссылки для библиотеки на основе версий - PullRequest
4 голосов
/ 18 июля 2011

Одна из моих общих библиотек my.so использует символ на основе версии в качестве символа @@ test_1.2.3 из библиотеки test.so. Когда я связываю разделяемую библиотеку my.so с моим исполняемым файлом, она говорит: «символ без ссылки @@ test_1.2.3». Это происходит, когда линия связи выглядит следующим образом -

g++ -o myexecutable myexecutable.o -L/path-to-my.so -lmy -L/path-to-test.so -ltest

Если я поменяю ссылку на -

g++ -o myexecutable myexecutable.o -L/path-to-my.so -lmy /path-to-test.so/libtest.so

это работает.

Почему libtest.so не выбирается при указании с помощью -L, а при задании в качестве полного пути?

1 Ответ

2 голосов
/ 18 июля 2011

Я подозреваю, что где-то есть еще libtest (может быть, libtest.a), который ld находит первым, у которого нет символа, который ищет ваша программа.пусть линкер предоставит подробный вывод о том, какие файлы он открывает или пытается открыть.Это должно сказать вам, почему один прогон ведет себя не так, как другой, и где находится «мошеннический» libtest (если есть).

...