Неопределенная ошибка ссылки с общими библиотеками, но не со статическими библиотеками - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть две версии библиотек в проекте: статическая и общая.

При работе со статическими библиотеками отлично работает приведенная ниже командная строка.

/usr/bin/gcc  -O3 -DNDEBUG -m64 -lm CMakeFiles/acl_update_rate_demo_mp_bh.dir/acl_update_rate_demo.c.o  -o ../../bin/acl_update_rate_demo_mp_bh -rdynamic ../../lib/libtap.a ../../lib/libtap_mp.a ../../lib/libtapinit.a ../../lib/liballoc.a ../../lib/libportable.a

Но с использованием командной строки ниже, использующей общуюбиблиотеки

/usr/bin/gcc  -O3 -DNDEBUG -m64 -lm CMakeFiles/acl_update_rate_demo_mp_bh.dir/acl_update_rate_demo.c.o  -o ../../bin/acl_update_rate_demo_mp_bh -rdynamic ../../lib/libtap.so ../../lib/libtap_mp.so ../../lib/libtapinit.so ../../lib/liballoc.so ../../lib/libportable.so -lm -Wl,-rpath,/projects/tap/src/bld_rel/lib

Я получаю сообщение об ошибке, как показано ниже.

../../lib/libtapinit.so: undefined reference to pm_mem_read` '

Я сделал следующее.

nm libtapinit.a | grep pm_mem_read

                 U pm_mem_read

nm libtapinit.so | grep pm_mem_read

                 U pm_mem_read

После проверкиC-файлы, которые составляют различные библиотеки, я обнаружил, что C-файл, который является частью libtapinit.a /, имеет объявленную функцию pm_mem_read.Но во всех файлах C ни одна функция не вызывает 'pm_mem_read'

Так почему же связывание работает со статическими библиотеками, но не с общими библиотеками в этом случае?

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