【发布时间】:2021-02-24 18:32:58
【问题描述】:
我试图使用 cmake 为我的项目生成一个共享库,不幸的是我收到了这个错误
Undefined symbols for architecture x86_64:
"_SDL_Init", referenced from:
_main in main.cpp.o
"_SDL_Quit", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果我正在构建一个静态库,它就可以工作。这是我的 cmake 文件:
cmake_minimum_required(VERSION 3.4.1)
project(yanthra_console VERSION 0.1 DESCRIPTION "A 3d Game Engine.")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -fexceptions")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING "Build type selections" FORCE)
set(THIRD_PARTY_DIR "../../third-party")
set(MAIN_SOURCE_DIR "../main/src")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/out)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib )
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
include_directories(${THIRD_PARTY_DIR}/SDL/include)
file(GLOB_RECURSE CPP_HEADERS ${MAIN_SOURCE_DIR}/*.hpp)
file(GLOB_RECURSE CPP_SOURCES ${MAIN_SOURCE_DIR}/*.cpp)
add_library(
yanthra
SHARED
${CPP_HEADERS}
${CPP_SOURCES}
)
add_executable(
yanthra_console
${CPP_HEADERS}
${CPP_SOURCES}
)
set_target_properties(
yanthra_console
PROPERTIES
LINK_FLAGS
"-F../Frameworks -framework SDL2 -framework OpenGL"
)
target_link_libraries(yanthra_console PRIVATE yanthra)
我能够创建一个带有可执行文件的静态库。我正在使用 Mulit Configuration 来构建项目。
【问题讨论】:
-
错误消息是来自您尝试构建库时,还是您尝试使用它时?我猜
add_executable部分适合你,但如果你尝试使用add_library它会失败吗? -
@super 是的。
add_executable单独工作以及使用它生成静态库时都可以正常工作。该错误仅在尝试生成共享库时出现。感谢您的回复。 -
那么您是否将 LINK_FLAGS 添加到您的库目标中?
-
我确实将它添加到了可执行目标中,但没有添加到库中。我应该使用哪种方法添加它?
-
你应该使用
set_target_properties,就像你使用yanthra_console一样
标签: c++ cmake shared-libraries c++17 sdl