2016-03-15 235 views
1

我正在使用mongodb作爲數據庫的C++項目巫婆。 我想靜態鏈接mongodb驅動程序。cmake如何部分靜態鏈接,部分動態鏈接?

我使用此命令來構建可執行二進制文件。

g++ -o ox one.cpp -pthread -Wall -std=c++11 \ 
-I /opt/mongo-cxx-driver/include/bsoncxx/v_noabi/ \ 
-I /opt/mongo-cxx-driver/include/mongocxx/v_noabi/ \ 
-L /opt/mongo-cxx-driver/lib/ \ 
-L /opt/mongo-c-driver/lib/ \ 
-Wl,-Bstatic -lmongocxx -lbsoncxx -lmongoc-1.0 -lbson-1.0 \ 
-Wl,-Bdynamic -lgcc_s -lstdc++ -lcrypto -lssl -lrt 

ldd ox報道說,MongoDB的驅動力是靜態鏈接現在

linux-vdso.so.1 => (0x00007ffd1a99d000) 
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7f8e4e0000) 
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7f8e15e000) 
    libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f7f8dd19000) 
    libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f7f8dab0000) 
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7f8d8a8000) 
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7f8d689000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f8d2bf000) 
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7f8cfb7000) 
    /lib64/ld-linux-x86-64.so.2 (0x000055fc81736000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7f8cdb2000) 

,我可以簡單的ox文件複製到另一臺計算機(相同的操作系統,同一版本)來使用它。

但是,我的問題是,如何在CMakeList.txt中寫規則,告訴cmake我想靜態鏈接哪些庫,哪些庫我想動態鏈接?

回答

0

如果你想動態鏈接一個庫,你必須有一個該庫的.so版本;同樣,如果你想靜態鏈接一個庫,你必須擁有該庫的一個.a版本。當然,這對於Linux系統來說也是如此