4

私はlibpurpleをラップするライブラリを作成しようとしています(ここで役立つようにlibpurpleについて何も知る必要はありません)。次に、Libpurpleは、dlopenなどを介してアクセスされる「プラグイン」をロードします。これらのプラグインは、libpurpleの関数を呼び出します。

ライブラリは問題なくビルドできますが、適切なlibpurple init関数を呼び出し、libpurpleがプラグインを読み込もうとすると、次のようなエラーが発生します。

シンボルルックアップエラー:/usr/local/lib/purple-2/autoaccept.so:未定義のシンボル: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

ありがとう。

4

2 に答える 2

1

暗闇の中でのショットですが、アプリをビルドするときと実行するときで、LD_LIBRARY_PATH環境変数が異なりますか?

于 2008-10-16T13:30:37.987 に答える
1

lddおよびnm unix コマンドを使用して、ラッパーおよびラップされたライブラリー内のシンボルを探します。

于 2008-10-16T06:55:07.567 に答える