CMake-无法链接共享库(子目录)

时间:2018-11-21 16:42:07

标签: c++ cmake clion

我正在使用CLion和mingw-w64。

我的可执行文件的CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(test_exe)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "D:\\test")

add_subdirectory(test_lib)
include_directories(test_lib/include;test_lib/deps/include)
link_directories(test_lib/deps/lib)

add_executable(test_exe main.cpp)
target_link_libraries(test_exe test_lib)

test_lib的CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(test_lib)

set(CMAKE_CXX_STANDARD 17)

include_directories(include;deps/include)
link_directories(deps/lib)

file(GLOB_RECURSE LIB_SOURCES "include/*.*" "src/*.*")

add_library(test_lib SHARED ${LIB_SOURCES})
target_link_libraries(test_lib libfreetype.a libpugixml.dll.a)

问题在于,当我添加带有add_library(test_lib SHARED ${LIB_SOURCES})的库时,我会遇到undefined reference错误,但是当我添加带有add_library(test_lib ${LIB_SOURCES})的库时,它会很好地工作。

一个空项目链接按预期方式(SHARED和STATIC),但是我不知道为什么这个项目不起作用?由于存在库,因此我链接到test_lib的CMakeLists.txt中?

1 个答案:

答案 0 :(得分:1)

构建静态库时,不会发生链接。它不会检查您是否具有所有必需的库。

当您对共享库进行相同操作时,然后在某些平台(例如Windows或具有-X defs的Linux)上,您需要解决所有引用。

您有一个共享库。