English 中文(简体)
gcc连接器问题
原标题:
  • 时间:2008-10-16 06:12:39
  •  标签:

我正在尝试创建一个将libpurple包装起来的库(你不需要在此处了解有关libpurple的任何信息)。反过来,libpurple会加载“插件”,这些插件只是通过类似于dlopen的方式访问的.so文件。这些插件又会回调libpurple中的函数。

我可以成功建立我的库,但当它调用适当的libpurple init函数时,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

谢谢。

问题回答

我会尝试使用Unix命令lddnm来查找包装器和被包装库中的符号。

这只是一种猜测,但是您在构建应用程序时和运行时使用的LD_LIBRARY_PATH环境变量是否不同?





相关问题
热门标签