【问题标题】:Can't use static lib of mongo-cxx-driver on Linux无法在 Linux 上使用 mongo-cxx-driver 的静态库
【发布时间】:2016-11-11 05:07:05
【问题描述】:

所以我按照官方教程进行安装:https://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/

不过,我不能将生成的库用作静态库。

所以我设法按照描述编译了驱动程序的 C 版本,在执行 make && sudo 之前,我已经使用 ./configure 启用了标志 --enable-static=yes make install 我得到了 libmongoc-1.0.alibbson-1.0.a 它们是静态的。到目前为止,一切都很好。

然后我做了cxx版的驱动,只是没有像C版那样的配置文件。所以我刚刚做了一个

cmake -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_BOOST=1 -DCMAKE_INSTALL_PREFIX=/usr/local

从构建文件夹,然后是 make && sudo make install

所以我得到了 libmongocxx.alibbsoncxx.a,但是当我尝试用它们编译时,我无法运行二进制文件,因为我得到了以下错误: 加载共享库时出错:libmongocxx.so._noabi:无法打开共享对象文件:没有这样的文件或目录

所以我知道这是因为缺少一些符号,然后我需要使用共享库来运行二进制文件,但我不希望这种情况发生,我希望二进制文件中的符号可以在没有的情况下运行任何 LD_PRELOAD。

有什么建议吗?

【问题讨论】:

  • 你没有提到你是如何编译你的应用程序的。请发布SSCCE,以便我们尝试复制您的问题。在这种情况下,请同时包含确切的命令行(或 shell 脚本)和输出。

标签: c++ mongodb c++11 gcc mongo-cxx-driver


【解决方案1】:

我在 Ubuntu 16.04 中遇到了同样的问题,我运行了 apt-get update 和 apt-get upgrade,问题就解决了。

似乎对编译器和一些库进行了一些更新,导致某些测试无法到达共享库。

【讨论】:

    【解决方案2】:

    我有a similar question,并已解决,现在我使用静态库成功编译并运行了我的二进制文件。

    我使用 newlisp 编写构建脚本,但静态链接选项非常有用,我将其粘贴在这里。

    c++  /to/your/path/site/code/back_end/builder/object/files1.cc.o ... /to/your/path/site/code/back_end/builder/object/files10.cc.o -o bin/site -static-libgcc -static-libstdc++ -L/usr/lib -lpthread -l:libmongocxx.a -l:libbsoncxx.a -l:libmongoc-1.0.a -l:libbson-1.0.a -lrt -lssl -lcrypto -lsasl2 -l:libboost_log.a -l:libboost_log_setup.a -l:libboost_system.a -l:libboost_thread.a -l:libboost_filesystem.a -lcppcms -lbooster -lcurl -ljsoncpp
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2017-11-27
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多