操作系统MacOS Sonoma 14.3.1,处理器Apple M1。我遇到了运行编译后的程序的问题。正如“标题”中所写,我在运行可执行文件后得到了这个控制台输出:
> ./game
dyld[22230]: Library not loaded: @rpath/SDL2.framework/Versions/A/SDL2
Referenced from: <(random symbols, I don't think show it is a good idea)> /Users/(my username)/Downloads/game-prototype/game
Reason: no LC_RPATH's found
zsh: abort ./game
我已经在
Library/Frameworks
文件夹中手动安装了 SDL2 库及其附加组件,并通过自制程序 (opt/homebrew/Cellar
) 安装了 SDL2 库,但自制版本从未工作。也许自制版本的问题是由于我没有启动这个程序,而是在 export PATH=/opt/homebrew/bin:$PATH
中添加 ~/.zprofile
后才开始工作。我真的不明白为什么它不起作用。
程序是通过以下命令编译的:
clang main.c global.c on-create/*.c clock/*.c active/*.c -I/Library/Frameworks/SDL2.framework/Headers -F/Library/Frameworks -framework SDL2 -framework SDL2_image -framework SDL2_mixer -framework SDL2_ttf -o game
根据之前指定的错误,我打开可执行文件(
SDL2.framework/Versions/A/SDL2
)来检查其功能,控制台输出为:
zsh: exec format error: /Library/Frameworks/SDL2.framework/Versions/A/SDL2
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
告诉我,我该怎么办?
将
-rpath /Library/Frameworks
添加到 clang 调用中应该可以解决该问题。
或者,更改框架的安装名称,重新签名,然后重新编译二进制文件也可以修复它:
install_name_tool -id /Library/Frameworks/SDL2.framework/Versions/A/SDL2 /Library/Frameworks/SDL2.framework/Versions/A/SDL2
codesign -s - -f /Library/Frameworks/SDL2.framework/Versions/A/SDL2
有关安装名称的更深入解释,请参阅我的这个答案。