2015-10-19 71 views
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; 
} 
+1

你試過用'libcrypto.so'(將'-lcrypto'作爲參數添加到'clang ++')連接嗎?另外,試着把'-lmongocliet'放在它依賴的庫之後。以防萬一。 –

+0

阿哈,這工作!我試圖鏈接反對libcrypt,但不libcrypto。爲什麼?因爲我誤讀了'dpkg -L libssl1.0.0 |的輸出grep/lib' ... – jma

回答

6

您應該鏈接對libcrypto.so,不libcrypt.so