2016-11-11 66 views
1

所以我按照官方教程安裝:https://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/不能使用蒙戈 - CXX驅動器的靜態庫在Linux上

Neverless,我不能使用產生庫,靜態的。

所以我設法編譯所描述的驅動程序的C版本,我已經啓用的標誌--enable-靜態= YES用做之前./configure這使& &須藤使安裝和我得到libmongoc-1.0.alibbson-1.0.a它們是靜態的。所以到目前爲止,一切都沒有問題。

然後我已經完成了驅動程序的cxx版本,只是沒有像C版本那樣的配置文件。所以我中庸之道做了

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

從build文件夾,隨後使& &須藤使安裝

所以我就libmongocxx.alibbsoncxx.a ,但是當我嘗試與他們編譯時,我無法運行二進制文件,因爲我得到以下錯誤: 加載共享庫時出錯:libmongocxx.so._noabi:無法打開共享目標文件:沒有這樣的文件或目錄

所以我明白這是因爲有一些符號丟失,然後我需要使用共享庫來運行二進制文件,但我不希望這種情況發生,我想要二進制文件中的符號,我可以運行它沒有任何LD_PRELOAD。

有什麼建議嗎?

+0

你還沒有提到你如何編譯你的應用程序。請發佈[SSCCE](http://sscce.org),以便我們可以嘗試複製您的問題。在這種情況下,請包括確切的命令行(或shell腳本)以及輸出。 – xdg

回答

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 
0

我有同樣的問題在一個Ubuntu 16.04和我運行apt-get的更新&易於得到升級,問題就解決了。

似乎有一些更新的編譯器和一些庫,防止一些測試到達共享庫。