【问题标题】:CMake - Can't link shared library (subdirectory)CMake - 无法链接共享库(子目录)
【发布时间】:2018-11-21 16:42:06
【问题描述】:

我正在使用 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}) 添加库时,它可以正常工作。

一个空的项目链接符合预期(共享和静态),但我想知道为什么这个项目不起作用?因为我在 test_lib 的 CMakeLists.txt 中链接的库?

【问题讨论】:

    标签: c++ cmake clion


    【解决方案1】:

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

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

    你有一个共享库。

    【讨论】:

    • 我不知道该怎么办。你能解释一下或发布一个链接吗?
    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多