不能在Linux上使用mongo-cxx-driver的静态库

时间:2016-11-11 05:07:05

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

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

永远不会,我不能将生成的库用作静态。

所以我设法按照描述编译了驱动程序的C版本,我在执行 make&之前使用./configure启用了标志 --enable-static = yes 。 &安培; sudo make install 我得到了 libmongoc-1.0.a libbson-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.a libbsoncxx.a ,但是当我尝试用它们编译时,我无法运行二进制文件,因为我得到了以下错误: 加载共享库时出现错误:libmongocxx.so._noabi:无法打开共享对象文件:没有这样的文件或目录

所以我理解这是因为有一些符号丢失然后我需要使用共享库来运行二进制文件但我不希望这发生,我想要二进制文件中的符号,我可以运行它任何LD_PRELOAD。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我有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

答案 1 :(得分:0)

我在Ubuntu 16.04中遇到了同样的问题,我运行了apt-get update& apt-get升级,问题解决了。

似乎有一些更新编译器和一些库阻止某些测试到达共享库。