我认为,从 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
在某些方面出了问题?
我怀疑你只需要在一些系统内容随着系统升级而移动/升级后再次运行配置。