【发布时间】:2012-01-21 08:40:27
【问题描述】:
我有一个带有一个项目的工作区,该项目与另一个项目(也在工作区中)中的静态库链接。这是Kobold2D 的问题,虽然我了解原因,但我一直无法解决,我想是similar to this question。
项目目标和静态库目标都具有 Debug 和 Release 构建配置。一切都很好。
现在有人在项目中添加了一个新的构建配置,并将其命名为 Ad-Hoc。现在项目的目标构建了 Ad-Hoc 配置,但是静态库没有这样的配置。显然,他们随后默认构建 Release 配置。
最后,当链接器应该把所有东西放在一起时,它失败了:
ld: library not found for -lbox2d-ios
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang++ failed with exit code 1
对于通过-force_load $(BUILT_PRODUCTS_DIR)/libSomeLib.a 强制加载的库,错误类似,但显示“找不到文件”。我应该注意到库“libbox2d-ios.a”在“链接二进制与库”构建阶段列表中。
显然问题在于链接器假定库位于 BUILT_PRODUCTS_DIR 的 Ad-Hoc-iphoneos 文件夹中,而它们实际上位于 Release-iphoneos 中文件夹,因为它们没有 Ad-Hoc 构建配置。
我怎样才能打链接器的脸并告诉他将库放在它们所在的位置?最好我正在寻找一种适用于这两种情况的解决方案,即库添加了标准方式(将二进制文件与库构建阶段链接)和需要额外 -force_load 才能工作的库。
我希望有办法:
- 强制将库放置在应用目标的构建配置文件夹中
- 运行后编译和预链接脚本,将每个库复制到构建配置文件夹中
- 指定库的相对路径
- 为 -force_load 使用除 $BUILT_PRODUCTS_DIR 之外的其他宏
- 像 -WTFmake-all-problems-go-away 这样的链接器标志
对不起,我不得不说……啊! :)
【问题讨论】:
-
ARGH!!! 确实(愤怒的家伙)
标签: xcode4 build linker static-libraries