【问题标题】:cmake how to partial static link, partial dynamic link?cmake如何部分静态链接,部分动态链接?
【发布时间】:2016-03-15 03:15:09
【问题描述】:

我正在开发一个使用 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 我要静态链接哪些库,我要动态链接哪些库?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    如果您想动态链接一个库,您必须拥有该库的 .so 版本;同样,如果您想静态链接库,则必须拥有该库的 .a 版本。当然,这是针对类似Linux的系统

    【讨论】:

      猜你喜欢
      • 2014-11-27
      • 1970-01-01
      • 2015-09-26
      • 2013-06-04
      • 1970-01-01
      • 2020-12-17
      • 2012-01-13
      • 2010-12-31
      相关资源
      最近更新 更多