我希望能够静态编译我的程序与另一个静态库进行链接,这个例子中我使用的是zeromq。以下是我的CMakeLists.txt
文件:
cmake_minimum_required(VERSION 2.6)
add_executable( test test.cpp )
find_library(ZMQ NAMES libzmq.a)
message(STATUS ${ZMQ})
target_link_libraries( test ${ZMQ} )
当我运行
mkdir build && cd build && cmake ..
命令时,它会找到 .a
文件。-- /usr/local/lib/libzmq.a
然而,如果我检查
link.txt
文件,库是动态链接的:/usr/bin/c++ CMakeFiles/test.dir/test.cpp.o \
-o test -rdynamic /usr/local/lib/libzmq.a
奇怪的是,如果我将文件移动到另一个目录,比如 /usr/lib
,然后再次运行 cmake ..
,它就会找到库的新路径:
-- /usr/lib/libzmq.a
但现在它神奇地变成了静态链接:
/usr/bin/c++ CMakeFiles/test.dir/test.cpp.o \
-o test -rdynamic -Wl,-Bstatic -lzmq -Wl,-Bdynamic
同样的情况也适用于我链接到的其他库。
为什么我所有的库都在/usr/local/lib
中被动态链接?