SFML系统-sfml损坏,在macOs arm64上打不开

问题描述 投票:0回答:1

我目前正在尝试将 SFML 包含在我的 C++ 应用程序中。我正在使用 CMake 链接库。

我遵循/重现的步骤:

  1. 已下载最新官方版本的 SFML。 (叮当臂64)

  2. 将下载文件夹中的文件复制到系统路径:

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 已损坏且无法打开。

我的应用程序输出:

'/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 配置文件

我尝试过的:

  1. 由于这可能是由无效的应用程序签名引起的,因此我在“设置”->“隐私和安全”中选择了“允许从任何地方下载的应用程序运行”。
  2. 在步骤 1 后重新下载 SFML 2.6.0。
  3. 将 SFML 降级至以下版本。

我的系统:

macOS 版本:Ventura 13.4.1

M2 Pro 苹果硅

c++ macos sfml macos-ventura
1个回答
0
投票

尝试

brew install sfml
,这样你就不用自己复制所有文件夹了。

要查看brew安装了sfml的位置,请写

brew ls sfml

brew 还将设置 sfml,以便 macos 不会通过请求运行所有 sfml 动态库的权限来中止应用程序启动。

© www.soinside.com 2019 - 2024. All rights reserved.