我有一个带有一个项目的工作区,该项目与另一个项目(也在工作区中)中的静态库链接。这是 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 才能工作的库。
我希望有办法:
对不起,我不得不说……啊! :)
最佳答案
正如在类似问题中所说的 iOS Static Library as a Subproject of a Project That Has Custom Build Configurations? ,解决方法是添加这一行
$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)
到目标的Framework Search Paths
、Header Search Paths
和/或Library Search Paths
关于xcode4 - Xcode 自定义构建配置导致静态库出现 "library/file not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523690/