我目前正在尝试将 SFML 包含在我的 C++ 应用程序中。我正在使用 CMake 链接库。
已下载最新官方版本的 SFML。 (叮当臂64)
将下载文件夹中的文件复制到系统路径:
SFML/include/* -> usr/local/include/
SFML/lib/* -> usr/local/lib/
SFML/Frameworks/* -> Libraries/Frameworks/
SFML/extlibs/* -> Libraries/Frameworks/
.
.
.
find_package(SFML COMPONENTS system window graphics network audio REQUIRED)
.
.
.
target_link_libraries(
${PROJECT_NAME}
PRIVATE
${SFML_LIBRARIES}
)
.
.
.
target_include_directories(
${PROJECT_NAME} PUBLIC
${SFML_INCLUDE_DIR}
)
.
.
.
set_target_properties(${PROJECT_NAME} PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER app.yildirimege.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
CMake 构建成功,找到 SFML 包含目录和库。并成功链接。
当我尝试在 QtCreator 中运行应用程序(或通过运行 make 和 ./app 手动运行)时,会出现相同的消息框:“sfml-*.framework 已损坏且无法打开。
'/Library/Frameworks/sfml-system.framework/Versions/2.6.0/sfml-system' not valid for use in process: library load disallowed by system policy)
不过,我有一个线索。当我在 CMake 中打印
${SFML_LIBRARIES}
时,这是输出:
-- Found SFML .. in /Library/Frameworks/SFML.framework
SFML LIBRARIES:/Library/Frameworks/sfml-system.framework/Library/Frameworks/sfml-window.framework/Library/Frameworks/sfml-graphics.framework/Library/Frameworks/sfml-network.framework/Library/Frameworks/sfml-audio.framework
cmake 尝试链接的库不是 usr/local/lib 中的库,而是 Libraries/Frameworks 中的框架。这是常见行为吗?
也刚看到这个:
-- SFML INCLUDE DIR:/Library/Frameworks/SFML.framework
-- Found SFML .. in /Library/Frameworks/SFML.framework
包含 dir 也是错误的。我正在使用官方的 FindSFML.cmake 配置文件
macOS 版本:Ventura 13.4.1
M2 Pro 苹果硅
尝试
brew install sfml
,这样你就不用自己复制所有文件夹了。
要查看brew安装了sfml的位置,请写
brew ls sfml
brew 还将设置 sfml,以便 macos 不会通过请求运行所有 sfml 动态库的权限来中止应用程序启动。