我在redhat上使用netbeans。我有一套相关的项目:
.a
实用程序库.a
库.a
库和三分之一
party shared和static libs .so
模块,它取决于两个.a
库和几个三分之一
party shared和static libs 我的目标是将可执行文件和模块轻松复制到目标计算机上,以执行必要的任务,而无需确保同时安装了相关的本地和第三方库。
可执行文件构建并且似乎工作正常。 .so
模块构建正常,但加载它的应用程序发现对各种事物的未查找引用。我找到了建议用
g++ ... -Wl,--whole-archive -llib1 -llib2 ... -Wl,--no-whole-archive
我只是发现您通过转到{project} > Properties > Linker > Libraries
将其添加到netbeans中;编辑图书馆清单;然后,Add Option
添加字符串。然后使用Up/Down
按钮将整个存档选项定位到所需位置。酷!
然而,结果是:
g++ -o dist/Debug/GNU_1-Linux-x86/myLocalSharedObjectModule.so build/Debug/GNU_1-Linux-x86/myLocalSharedObjectModule.o -L/usr/local/myLibTestDestination -Wl,--whole-archive -lpam -lpcre -lsqlite3 /usr/lib64/mysql/libmysqlclient.a -lmyLib-1 -lmyLib-2 -Wl,--no-whole-archive -shared -fPIC
/usr/lib64/mysql/libmysqlclient.a(mysys_dtrace.o):(.SUNW_dof+0x0): multiple definition of `__SUNW_dof'
/usr/lib64/mysql/libmysqlclient.a(clientlib_dtrace.o):(.SUNW_dof+0x0): first defined here
/usr/bin/ld: Warning: size of symbol `__SUNW_dof' changed from 4050 in /usr/lib64/mysql/libmysqlclient.a(clientlib_dtrace.o) to 4274 in /usr/lib64/mysql/libmysqlclient.a(mysys_dtrace.o)
/usr/lib64/mysql/libmysqlclient.a(mysys_ssl_dtrace.o):(.SUNW_dof+0x0): multiple definition of `__SUNW_dof'
/usr/lib64/mysql/libmysqlclient.a(clientlib_dtrace.o):(.SUNW_dof+0x0): first defined here
/usr/bin/ld: Warning: size of symbol `__SUNW_dof' changed from 4274 in /usr/lib64/mysql/libmysqlclient.a(clientlib_dtrace.o) to 3490 in /usr/lib64/mysql/libmysqlclient.a(mysys_ssl_dtrace.o)
collect2: ld returned 1 exit status
我不知道该怎么做。实际上是否可以将静态(mysql和我的libs)和共享(sqlite3,pcre,...)对象链接到共享对象中?