无法使用cmake生成共享库

Unable to generate a shared library using cmake

本文关键字:共享 cmake      更新时间:2024-09-29

我试图使用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配置来构建项目。

看起来像是符号可见性问题。

默认情况下,clang/gcc符号是隐藏的。

有一个关于这一点的cppcon演讲:https://www.youtube.com/watch?v=m0DwB4OvDXk&list=PL4s9OdsXD7aXhgqibbEzf8zAM5eiiens&索引=9

基本上,要么这个库不支持作为共享库构建。或者您需要以某种方式启用该功能。

或者只是强制打开符号可见性。