为什么我的 CMake 项目在升级 macOS 后崩溃了?

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

我认为,从 13.5 升级到 Ventura 13.6 改变了 CMake 在我的 Macbook 上的工作方式。我很好奇发生了什么变化。在我进行以下设置之前:

  • 一个包含内容的文件
    CMakeLists.txt
    cmake_minimum_required(VERSION 3.26)
    project(Test)
    find_package(SDL2 REQUIRED COMPONENTS SDL2)
    find_package(SDL2_image REQUIRED)
    add_executable(test test.c)
    target_link_libraries(test PRIVATE SDL2::SDL2)
    target_link_libraries(test PRIVATE SDL2_image::SDL2_image)
    target_compile_options(test PRIVATE -g -Wall -fno-strict-aliasing)
    
  • 一个包含内容的文件
    test.c
    #include<SDL_image.h>
    
    int main() {
        SDL_Surface* surface_tiles = IMG_Load("figure.png");
        return 1;
    }
    
  • 放置在
    SDL2
     中的 
    SDL2_image
    /Library/Frameworks

我能够在升级之前编译并运行脚本。升级后我可以编译,但出现运行时链接错误:

dyld[5506]: Library not loaded: @rpath/SDL2.framework/Versions/A/SDL2
  Referenced from: <86C3AED6-AC52-3493-826E-893EAD045543> path/to/executable
  Reason: tried: '/SDL2.framework/Versions/A/SDL2' (no such file)
Abort trap: 6

根据我的研究和使用该工具

otool -l executable
,我得出的结论是,由于某种原因,CMake 没有为可执行文件设置
@rpath
。我可以通过执行
export DYLD_FRAMEWORK_PATH=/Library/Frameworks/
来运行程序可执行文件。或者,我发现如果我将
CmakeLists.txt
更改为

cmake_minimum_required(VERSION 3.26)
project(Test)
include_directories("/Library/Frameworks/SDL2.framework/Versions/A/Headers/")
include_directories("/Library/Frameworks/SDL2_image.framework/Versions/A/Headers/")
add_executable(test test.c)
target_link_libraries(
    test 
    PRIVATE 
    "/Library/Frameworks/SDL2.framework/Versions/A/SDL2" 
    "/Library/Frameworks/SDL2_image.framework/Versions/A/SDL2_image"
)
target_compile_options(test PRIVATE -g -Wall -fno-strict-aliasing)

然后生成的可执行文件具有正确的

@rpath
,我可以在不设置环境变量的情况下运行它。有谁知道发生了什么事?新的 OSX 版本是否破坏了 CMake 还是我原来的
CMakeLists.txt
在某些方面出了问题?

c macos cmake sdl-2
1个回答
0
投票

我怀疑你只需要在一些系统内容随着系统升级而移动/升级后再次运行配置。

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