我目前正在尝试在我的C++应用程序中包含SFML。我正在使用CMake链接库。
我遵循/复制的步骤:
1.已下载latest official release of SFML。(clang arm 64)
1.已将下载文件夹中的文件复制到系统路径:
SFML/include/* -> usr/local/include/
SFML/lib/* -> usr/local/lib/
SFML/Frameworks/* -> Libraries/Frameworks/
SFML/extlibs/* -> Libraries/Frameworks/
字符串
1.使用CMake链接库
.
.
.
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}
)
.
.
.
型
1.已在CMakeLists.txt中为macOS创建应用程序捆绑包:
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 is damaged and can 't be opened.”
我的应用输出:
'/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
型
包含目录也是错误的。我使用的是官方的FindSFML.cmake配置文件
我尝试过:
1.由于这可能是由无效的应用程序签名引起的,我选择了“允许应用程序运行从任何地方下载,在设置->隐私和安全。
1.已在步骤1之后重新下载SFML 2.6.0。
1.将SFML降级到以下版本。
我的系统:
macOS版本:Ventura 13.4.1
M2 Pro Apple Silicon
1条答案
按热度按时间iih3973s1#
尝试
brew install sfml
,这样你就不必自己复制所有的文件夹。要查看brew安装sfml的位置,请写入
brew ls sfml
brew也会设置sfml,这样macos就不会通过询问运行所有sfml动态库的权限来中止应用程序的启动。