c ++,netbeans,--whole-archive

时间:2015-09-03 20:06:36

标签: c++ netbeans

我在redhat上使用netbeans。我有一套相关的项目:

  1. 独立.a实用程序库
  2. 独立项目特定.a
  3. 可执行文件取决于两个.a库和三分之一 party shared和static libs
  4. 一个.so模块,它取决于两个.a库和几个三分之一 party shared和static libs
  5. 我的目标是将可执行文件和模块轻松复制到目标计算机上,以执行必要的任务,而无需确保同时安装了相关的本地和第三方库。

    可执行文件构建并且似乎工作正常。 .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,...)对象链接到共享对象中?

0 个答案:

没有答案