c++ SFML系统-sfml已损坏,无法在macOS arm 64上打开

58wvjzkj  于 4个月前  发布在  Mac
关注(0)|答案(1)|浏览(105)

我目前正在尝试在我的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

iih3973s

iih3973s1#

尝试brew install sfml,这样你就不必自己复制所有的文件夹。
要查看brew安装sfml的位置,请写入brew ls sfml
brew也会设置sfml,这样macos就不会通过询问运行所有sfml动态库的权限来中止应用程序的启动。

相关问题