Xcode:可执行文件找不到 SDL2.framework
Posted
技术标签:
【中文标题】Xcode:可执行文件找不到 SDL2.framework【英文标题】:Xcode : executable does not find SDL2.framework 【发布时间】:2018-03-24 11:58:19 【问题描述】:我正在尝试从我的 SDL2-Project 创建一个可执行文件,它将在我发送到的任何 Mac 上运行。
我的程序是用 C++,Xcode9.2 编写的
显然,在 Xcode 中的方式是 Project->Archive。只要我在我的 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 现在会在 debug 文件夹中查找框架并正确创建可执行文件,而 /Library/Frameworks/ 中没有 SDL 框架。
编辑:这不适用于 Project->Archive。即使我将框架放入发布文件夹。 (/Users/Tim/Library/Developer/Xcode/DerivedData/Chat_Program-gapnuzuivnylrgbubtywdbzshous/Build/Products/Release)
但当我尝试运行可执行文件时,会出现同样的错误,提示无法加载库。 但是,如果我将框架放回 /Library/Frameworks/ 中,可执行文件确实会运行,这告诉我必须有一个选项告诉 Xcode 可执行文件必须在哪里搜索框架,而不是 BuildSettings->"Framework Search Paths "的项目。
那么我如何告诉我的可执行文件在它自己的文件夹中查找框架?
【问题讨论】:
【参考方案1】:这就是我解决问题的方法:
-
转到 BuildSettings->All->Linking->Runpath Search Paths
更改为“@loader_path/”
显然,这会将上述错误消息中的@rpath 更改为可执行文件所在的路径,因此现在可以将框架与可执行文件放在同一文件夹中。
其实很简单,也许我是个白痴,我必须研究一整天才能找到这个。也许它隐藏得很好,即使在互联网上也尽可能保密......
随便 - 很高兴它现在可以工作了 :)
【讨论】:
以上是关于Xcode:可执行文件找不到 SDL2.framework的主要内容,如果未能解决你的问题,请参考以下文章
找不到 CFBundle CertUIFramework.axbundle 的可执行文件