4
我正在尝试使用mongodb传统的C++驱动程序。 (这里的“legacy”表示生产版本,fwiw。)在使用clang ++ 3.6和boost 1.55(来自ubuntu软件包仓库)的ubuntu 15.04主机上,并使用mongo-cxx-driver从git中拉出来后,我编译了驱动程序,然后尝试编译测试程序。未定义的符号引用X509_free
$ clang++ -std=c++14 mongo.cc -pthread -lmongoclient -lboost_thread \
-lboost_system -lboost_regex -lssl -o mo
我看到这个错误:
clang++ -std=c++14 mongo.cc -pthread -lmongoclient -lboost_thread -lboost_system -lboost_regex -lssl -lcrypt -o mo
/usr/bin/ld: /usr/local/lib/libmongoclient.a(ssl_manager.o): undefined reference to symbol '[email protected]@OPENSSL_1.0.0'
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0: error adding symbols: DSO missing from command line
clang: error: linker command failed with exit code 1 (use -v to see invocation)
显然我错过X509_free()
,但现在看来,应该是在的libssl(这是openSSL1.0.0说dpkg和库符号链接本身)。
非常感谢您的任何提示。
我不认为这是很重要的位置,但这是mongo.cc:
#include <cstdlib>
#include <iostream>
#include "mongo/client/dbclient.h" // for the driver
void run() {
mongo::DBClientConnection c;
c.connect("localhost");
}
int main() {
mongo::client::initialize();
try {
run();
std::cout << "connected ok" << std::endl;
} catch(const mongo::DBException &e) {
std::cout << "caught " << e.what() << std::endl;
}
return EXIT_SUCCESS;
}
你试过用'libcrypto.so'(将'-lcrypto'作为参数添加到'clang ++')连接吗?另外,试着把'-lmongocliet'放在它依赖的库之后。以防万一。 –
阿哈,这工作!我试图链接反对libcrypt,但不libcrypto。为什么?因为我误读了'dpkg -L libssl1.0.0 |的输出grep/lib' ... – jma