CMAKE构建静态可执行文件而不是使用动态库

时间:2014-11-30 10:05:36

标签: c++ cmake static-linking dynamic-linking

我的cmake文件是

cmake_minimum_required(VERSION 2.8.4)
project(libtry CXX)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(EXE_NAME libtry)

file(GLOB_RECURSE MAIN_SRC_FILES "src/*.cpp")
add_library (Try SHARED ${MAIN_SRC_FILES})


set(SOURCE_FILES main.cpp)
add_executable(${EXE_NAME} ${SOURCE_FILES})
target_link_libraries(${EXE_NAME} Try)

此文件可以工作并创建两个文件:.so文件和可执行文件,它可以正常工作。问题是甚至在删除.so文件后,可执行文件正常工作,这意味着可执行文件是静态链接的。

为什么会发生这种情况以及为什么cmake没有动态使用.so文件?

更新 运行ldd的依赖关系证实了这一点。 ldd的输出是

linux-vdso.so.1 =>  (0x00007fffea5fe000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f3585779000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3585563000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f358519c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3584e96000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3585aa7000)

0 个答案:

没有答案