【问题标题】:Static framework with -"ObjC"带有-“ObjC”的静态框架
【发布时间】:2014-09-18 17:54:57
【问题描述】:

我的项目已经导入了几个第三方框架,其中很多都需要在Building Settings -> Linking -> Other linker flags 选项卡中进行“-ObjC”优化。

目前,我正在尝试添加另一个静态框架(OSMap SDK),优化导致“Undefined symbols for architecture i386”错误。

Undefined symbols for architecture i386:
"_BZ2_bzBuffToBuffDecompress", referenced from:
    -[OSTerrain getDataLoadedForEasting:northing:] in OSMap(OSTerrain.o)
"_OBJC_CLASS_$_RMMapTiledLayerView", referenced from:
    objc-class-ref in OSMap(RMMapView.o)
"_OBJC_CLASS_$_RMMarker", referenced from:
    objc-class-ref in OSMap(RMMapOverlayView.o)
"_OBJC_CLASS_$_RMOpenStreetMapSource", referenced from
    objc-class-ref in OSMap(RMMapView.o)
"_OBJC_CLASS_$_RMQuadTree", referenced from:
    objc-class-ref in OSMap(RMMapView.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我确定我添加了 QuartzCore.framework 和 Git 上指定的其他框架。 据我所知,框架中没有 .m 文件。

有没有办法在使用静态框架的同时仍将优化功能保留在其他链接器标志下?

编辑:

  1. libbz.dylib 有助于消除第一个错误。
  2. 目前其他四个错误仍然存​​在。我的猜测是它们应该在 route-me 的库中,并且不知何故丢失了。而如果我导入route-me的库,虽然这样可以消除未定义符号的错误,但会产生更多重复符号的新错误。

【问题讨论】:

  • 为什么不呢?如果您的配置有问题,请添加更多详细信息...
  • @Macmade 已添加。 :)

标签: objective-c xcode compiler-construction linker


【解决方案1】:

搜索丢失的符号表明您需要链接 libbzip2 和来自 github 的名为“route-me”的东西。

如果你有这些,你可能没有它们用于正确的架构。您标记了您的问题 iOS,但错误与 i386 构建有关,也许您的目标是没有支持它的库的模拟器。

【讨论】:

  • libbz2.dylib 确实消除了第一个错误。但是,当我尝试导入 route-me 时,RMMapTiledLayerView 和 RMQuadTree 仍然存在。我还尝试使用 mapBox 替换 route-me,因为它有两个丢失的文件。尽管这消除了最后两个错误,但它也生成了一个新错误,即“ld: 167 duplicate symbols for architecture i386”。我猜这个库已经导入了,只是没有找到?
  • 显示日志导航器中报告的重复符号错误之一。它应该告诉它在哪里找到多个符号。
  • 重复符号_OBJC_IVAR_$_RMProjection._planetBounds in:/Users/Yigexu/Library/Developer/Xcode/DerivedData/OSTileSourceDemo-drnclwpsfccilgeiebpfivmzutuo/Build/Products/Debug-iphonesimulator/libMapBox.a(RMProjection.o) /Users/Yigexu/Desktop/NEW 4/ios-sdk-demo-tilesources-master/StaticFrameworks/OSMap.framework/OSMap(RMProjection.o)
  • 也就是说,您正在链接 RMProjection 的两个副本……一个来自 OSMap 框架,另一个来自名为 libMapBox.a 的静态库。我不能告诉你哪个是正确的,但两者同时都是一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2015-07-18
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
相关资源
最近更新 更多