CMake - Невозможно связать разделяемую библиотеку (подкаталог) - PullRequest
0 голосов
/ 21 ноября 2018

Я использую 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)

CMakeLists.txt test_lib:

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 голосов
/ 21 ноября 2018

Когда вы создаете статическую библиотеку, связывание не происходит.Он не проверяет наличие всех необходимых библиотек.

Когда вы делаете то же самое для общей библиотеки, затем на некоторых платформах (например, Windows или Linux с -X defs, я думаю), вам нужночтобы решить все ссылки.

И у вас есть общая библиотека.

...