2008-10-16 3 views
4

Я пытаюсь создать библиотеку, которая обертывает libpurple (вам не нужно ничего знать о libpurple, чтобы помочь здесь). Libpurple, в свою очередь, загружает «плагины», которые доступны только через .so, через что-то вроде dlopen. Эти плагины в свою очередь возвращаются к функциям в libpurple.gcc linker issue

я могу построить свою библиотеку просто отлично, но когда он вызывает соответствующую функцию libpurple инициализации и libpurple пытается загрузить плагин, я получаю сообщение об ошибке, как следующее:

symbol lookup error: /usr/local/lib/purple-2/autoaccept.so: undefined symbol: purple_user_dir

purple_user_dir функция определена в libpurple. Когда я создаю программу (а не библиотеку), которая ссылается на libpurple, проблем нет. Я попытался использовать -export-dynamic, и это, похоже, не помогло. Вот моя команда сборки:

gcc -export-dynamic -I/usr/local/include/libpurple -I/usr/include/python2.5 -DH\ 
AVE_CONFIG_H -I. -DSTANDALONE -DBR_PTHREADS=0 -DDATADIR=\"/usr/local/share\" -D\ 
LIBDIR=\"/usr/local/lib/purple-2/\" -DLOCALEDIR=\"/usr/local/share/locale\" -DS\ 
YSCONFDIR=\"/usr/local/etc\" -Wall -Waggregate-return -Wcast-align -Wdeclarati\ 
on-after-statement -Wendif-labels -Werror-implicit-function-declaration -Wextra\ 
-Wno-sign-compare -Wno-unused-parameter -Winit-self -Wmissing-declarations -Wm\ 
issing-noreturn -Wmissing-prototypes -Wpointer-arith -Wundef -Wp,-D_FORTIFY_SOU\ 
RCE=2 -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/inc\ 
lude/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/gl\ 
ib-2.0/include -I/usr/include/libxml2 -g -g -O2 -c -o spurple.o spurple.c 

gcc -shared -g -O2 -Wl,--export-dynamic -pthread 
../../libpurple/.libs/libpurple.so -o spurple.so spurple.o 
-Wl,--export-dynamic /usr/local/lib/libpurple.so 
-ldbus-glib-1 -ldbus-1 /usr/lib/libgobject-2.0.so /usr/lib/libgmodule-2.0.so 
-ldl /usr/lib/libgthread-2.0.so -lrt /usr/lib/libglib-2.0.so 
/usr/lib/libxml2.so -lm -lpython2.5 -lutil -lpthread -lnsl -lresolv 

Спасибо.

ответ

1

Я бы попытался использовать команды unix для ldd и nm, чтобы искать символы в обертке и обернутые библиотеки.

+0

От использования nm это выглядит так: purple_user_dir определяется в libpurple.so, но не в оболочке (spurple.so). Так ли это должно быть? Некоторые другие символы из libpurple определены в spurple.so, это похоже на функции, которые я вызывал, но не purple_user_dir, например. – 2008-10-16 08:01:37

1

Просто выстрел в темноте, но у вас есть другая переменная среды LD_LIBRARY_PATH при создании приложения, чем при его запуске?