Xcode:可执行文件未找到 SDL2.framework
Xcode : executable does not find SDL2.framework
我正在尝试从我的 SDL2 项目创建一个可执行文件,它将 运行 我发送到的任何 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->"Framework Search Paths"。
那么如何让我的可执行文件在它自己的文件夹中查找框架?
我是这样解决问题的:
- 转到 BuildSettings->All->Linking->Runpath 搜索路径
- 更改为“@loader_path/”
显然这会将上面错误消息中的@rpath 更改为可执行文件所在的路径,因此现在可以将框架放入与可执行文件相同的文件夹中。
其实很简单,也许我是个白痴,我不得不研究一整天才能找到这个。也许它只是隐藏得很好,即使在互联网上也尽可能保密...
随便 - 很高兴它现在可以工作了:)
我正在尝试从我的 SDL2 项目创建一个可执行文件,它将 运行 我发送到的任何 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->"Framework Search Paths"。
那么如何让我的可执行文件在它自己的文件夹中查找框架?
我是这样解决问题的:
- 转到 BuildSettings->All->Linking->Runpath 搜索路径
- 更改为“@loader_path/”
显然这会将上面错误消息中的@rpath 更改为可执行文件所在的路径,因此现在可以将框架放入与可执行文件相同的文件夹中。
其实很简单,也许我是个白痴,我不得不研究一整天才能找到这个。也许它只是隐藏得很好,即使在互联网上也尽可能保密...
随便 - 很高兴它现在可以工作了:)