У меня есть две версии библиотек в проекте: статическая и общая.
При работе со статическими библиотеками отлично работает приведенная ниже командная строка.
/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'
Так почему же связывание работает со статическими библиотеками, но не с общими библиотеками в этом случае?