无法使用cmake生成共享库
Unable to generate a shared library using cmake
我试图使用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
基本上,要么这个库不支持作为共享库构建。或者您需要以某种方式启用该功能。
或者只是强制打开符号可见性。
相关文章:
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- CMake - 更改共享库链接选项
- 如何创建一个共享对象与另一个.所以在Cmake
- 从 CMake 中的库目录加载共享库?
- 如何在同一个 CMAKE 项目中强制链接到共享库?
- 子目录之间的 CMAKE 共享变量
- 如何使用 CMake 在 android 构建上编译和共享两个 c++ 库
- CMake 导入本地共享库以及如何将其包含在标头中
- 我应该安装 .cmake 文件来共享/cmake 还是 lib/cmake?
- 通过cMake使用具有自定义文件扩展名的共享库
- 如何使用 cmake 在代码中包含、构建和调试共享库 (.so)?
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- CMake 添加和删除宏定义以编译共享库/可执行文件
- Cmake 查找模块用于区分共享库或静态库
- 使用多个标头使用 CMake 创建C++共享库
- CMake:生成或提取共享库所需的标头
- 使用 CMake 和 C++ 处理共享库依赖项
- 如何使 extern 方法在共享库中定义,但使用 cmake 在其他目标中声明?
- CMake:修改共享库时的冗余链接
- Ogre 3D共享库与CMAKE链接时,在Linux上执行二进制时找不到