我正在尝试从我的 SDL2-Project 创建一个可执行文件,它将在我发送它的任何 Mac 上运行。
我的程序是用C++写的,Xcode9.2
显然在 XCode 中的方法是项目->存档。只要我在我的 Mac 上执行该产品,它就可以正常工作。在 /Library/Frameworks/ 下未安装 SDL2.framework 的 Mac 上,执行时会抛出以下错误:
dyld: Library not loaded: @rpath/SDL2.framework/Versions/A/SDL2
Referenced from: /Users/thomas/Downloads/Chat_Program_Mac v1/Chat_Program 2
Reason: image not found
所以这个错误并不令人惊讶,因为我没有静态链接(无论如何都不知道这是如何工作的)并且显然程序需要框架才能运行。
在 Windows 上,您只需将 .dll 文件放在与 .exe 相同的文件夹中即可。
现在在 Mac 上,将框架放在与可执行文件相同的文件夹中不会改变任何东西。
根据我的研究我知道,在 XCode 中的 BuildSettings->“Framework Search Paths” 下有一个选项可以告诉编译器在哪里寻找框架。
这个论坛上有人回答了一个类似的问题,将 ./ 作为搜索路径并将其设置为递归,让编译器在可执行文件所在的同一文件夹中查找框架。
这不知何故让我更接近解决方案。在构建过程中,XCode 现在会在调试文件夹中查找框架并创建可执行文件而不会出错,而 /Library/Frameworks/ 中没有 SDL 框架。
编辑:这不适用于项目->存档。即使我将框架放入发布文件夹中。 (/Users/Tim/Library/Developer/Xcode/DerivedData/Chat_Program-gapnuzuivnylrgbubtywdbzshous/Build/Products/Release)
当我尝试运行可执行文件时,出现相同的错误,提示无法加载库。
可执行文件确实运行了,如果我将框架放回 /Library/Frameworks/,这告诉我必须有一个选项告诉 XCode 可执行文件必须在哪里搜索框架,而不是 BuildSettings->“框架搜索路径” ”的项目。
那么我如何告诉我的可执行文件在它自己的文件夹中查找框架?
所以这就是我解决问题的方法:
显然,这会将上面错误消息中的@rpath 更改为可执行文件所在的路径,因此现在可以将框架放入与可执行文件相同的文件夹中。
其实很简单,也许我是个白痴,我不得不研究一整天才能找到这个。也许它只是隐藏得很好,即使在互联网上也尽可能保密......
不管 - 很高兴它现在可以工作了:)