我使用GPhoto2 框架编写了一个简单的应用程序,只要框架位于最初编译的位置,它就可以工作。不过,我想把它移到应用程序包中,所以它不需要单独安装,所以我需要让它相对于这个主可执行文件工作。
不幸的是,该框架不是 Xcode 项目。它使用脚本构建,所以我不能简单地更改安装目录构建设置,这是我在寻找答案时经常看到的解决方案。作为 Xcode 和 Mac 编程的新手,我也无法知道如何将框架转换为 Xcode 项目。
我遇到的另一个建议是使用 install_name_tool 更新库 ID 和依赖项,将绝对路径替换为“@executable_path/../Frameworks/GPhoto2.framework”形式的路径。该框架不是一个单一的二进制文件,而是包含许多 .dylib 和 .so 库,但所有这些库的更新只成功了一半。
我已将 Xcode 设置为在构建框架时将框架复制到应用程序包中。然后,如果我从最初编译的位置删除框架,则应用程序无法加载,OS X 生成的报告说 libgphoto2 库无法再找到,正如预期的那样。
如果我随后使用 install_name_tool 更新应用程序包内的所有框架库以及应用程序二进制文件本身中的引用,则应用程序将加载但找不到任何连接的相机。使用 otool 我能够验证所有引用都已正确更改。
但是,如果我将框架的副本替换到其原始位置,它就会再次正常工作,识别连接的摄像机,无论该框架使用相对位置还是绝对位置。显然,尽管加载,它仍在查看此位置。我什至尝试依次从框架中的原始位置删除每个单独的库文件,以查看问题是否只是其中依赖的结果,但无论缺少哪个,应用程序都将无法工作。
顺便说一句,如果我使用框架的更新版本构建应用程序,它会失败说找不到库“@executable_path/../Frameworks/GPhoto2.framework/prefix/lib/libgphoto2.2.dylib”
我是在做错什么或错过了一步,还是我试图对在 Xcode 之外创建的框架做不可能的事情?