我正在研究一个使用mongodb作为数据库的c ++项目。 我想静态链接mongodb驱动程序。
我使用此命令构建可执行二进制文件。
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 :(得分:0)
如果要动态链接库,则必须具有该库的.so版本;同样,如果您想静态链接库,则必须具有该库的.a版本。当然,这适用于类似Linux的系统