我的情况很简单,一个工作区有两个兄弟项目:一个主(iOS)应用程序和一个构建该应用程序使用的多个静态库目标的项目。
以下是我配置构建的方式:
- 将主应用程序的构建设置中的“用户标题搜索路径”指向库项目位置(通过源树)
- 在我的应用程序的主要目标的编辑器 - >构建阶段 - >“将二进制与库链接”部分中,添加了我想要使用的库产品。
- 在方案中,勾选“查找隐式依赖项”
清理(并删除派生数据)后,构建在主项目的构建过程中出现了此错误:
ld: library not found for -lChipmunk
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1
果然,如果我查看新创建的派生数据,找到的唯一对象文件是主应用程序的,而不是库的。对 *.o 文件的广泛“查找”并没有揭示任何相关内容,因此库不会丢失,它们肯定不会被构建。
一些补充要点:
- 当我在 Apple 开发论坛上询问此问题时,有人建议我应该在主目标的“构建阶段”->“目标依赖项”编辑器中添加显式依赖项。但是您只能将此处的 deps 添加到same项目或子项目;就我而言,我有应用程序和库项目作为工作场所的兄弟姐妹。
- 如果我在主构建之前手动构建每个库,一切都很好。
Update:
我刚刚找到了一个解决方法,即将所有部门的目标添加到主应用程序方案的“构建”部分中。我之前曾尝试过此操作,但没有成功,但没有意识到我可以在列表中拖动目标以获得正确的构建顺序。现在,无论是在清理之后还是在库或主应用程序源发生更改之后,构建都会以正确的顺序发生。
我将问题留在这里,因为肯定不需要手动整理构建顺序。我的设置方式一定有问题。
编辑方案(交换构建目标、取消/选中“并行化构建”和/或“查找隐式依赖项”)对我来说不起作用。在静态库中进行任何代码更改后,我仍然必须清理构建项目。搜索开发论坛,终于找到了这个答案 https://devforums.apple.com/message/419328#419328,这创造了奇迹。
确保身份和类型检查器显示并选择应用程序项目(而不是库)中的 libWhatever.a 文件。如果您看到位置:相对于项目[或相对于组],这就是您的问题。
- 单击相对于项目并将其更改为相对于构建
产品。
- 这将改变链接的类型,但它仍然会
被打破。
- 单击“定位”按钮并找到输出文件。
通过以下方式将静态库添加到现有项目中构建阶段 -> 将二进制文件与库链接自动使其“相对于组”(如果两者是同一工作区中的兄弟姐妹)。按照上述方式更改其位置可以解决构建依赖性问题,并且在项目导航器中,您的 .a 文件应以黑色字母(而不是红色)显示。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)