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

Can't use static lib of mongo-cxx-driver on Linux

本文关键字:mongo-cxx-driver 静态 Linux 不能      更新时间:2023-10-16

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

然而,我不能将生成的库作为静态库使用。

所以我按照描述编译了C版本的驱动程序,在执行make &&之前,我已经用。/configure启用了标志——enable-static=yessudo make install,我得到了libmongoc-1.0。A libbson-1.0。是静态的。到目前为止,一切都还好。

然后我做了cxx版本的驱动程序,除了没有配置文件在C版本。我刚刚写了一个

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

从构建文件夹,后面跟着make &&Sudo make install

所以我得到了libmongocxx。libbsoncxx。a,但是当我尝试用它们编译时,我无法运行二进制文件,因为我得到了以下错误:加载共享库时出现错误:libmongocxx.so。_noabi:无法打开共享对象文件:No such file or directory

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

有什么建议吗

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

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

我有一个类似的问题,并且解决了,现在我成功地用静态库编译并运行了我的二进制文件。

我使用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