与 libOmnitureAppMeasurement-iPhoneSimulator.a 链接的 iOS 未定义符号错误
Posted
技术标签:
【中文标题】与 libOmnitureAppMeasurement-iPhoneSimulator.a 链接的 iOS 未定义符号错误【英文标题】:iOS undefined symbol errors linking with libOmnitureAppMeasurement-iPhoneSimulator.a 【发布时间】:2014-03-05 23:22:19 【问题描述】:我正在使用 Omniture App Measurement 库将应用使用跟踪构建到 ios iPad 应用(iOS 6.1 和更高版本)中。
由于设备和模拟器有单独的库,我使用模拟器的库:libOmnitureAppMeasurement-iPhoneSimulator.a
我已经下载并解压了库和标题到文件夹中 我项目中的 iPhoneAppMeasurement(此文件夹包含文件 libOmnitureAppMeasurement-iPhoneSimulator.a 和 OMAppMeasurement.h 已正确添加到项目中)
我确保在我的库中正确指向该库 在构建设置下搜索路径。
我在代码中添加了 Omniture SDK 设置和一些测试调用。
当我构建时,我得到“Pointer-to-literal-objc-class-name”类型的未定义符号错误...
Undefined symbols for architecture i386:
".objc_class_name_NSArray", referenced from:
pointer-to-literal-objc-class-name in libOmnitureAppMeasurement-iPhoneSimulator.a(OMAppMeasurement.o)
".objc_class_name_NSBundle", referenced from:
pointer-to-literal-objc-class-name in libOmnitureAppMeasurement-iPhoneSimulator.a(OMAppMeasurement.o)
".objc_class_name_NSDate", referenced from:
pointer-to-literal-objc-class-name in libOmnitureAppMeasurement-iPhoneSimulator.a(OMAppMeasurement.o)
... etc ...
".objc_class_name_UIScreen", referenced from:
pointer-to-literal-objc-class-name in libOmnitureAppMeasurement-iPhoneSimulator.a(OMAppMeasurement.o)
"_OBJC_CLASS_$_OMAppMeasurement", referenced from:
objc-class-ref in OmnitureEvent.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我为 iPad 6.1 和 iPad 7.0 模拟器获得了这些。我该如何解决这个问题?
更新: 根据反馈和其他文章,我采取了以下步骤...
- I added libstdc++ under Apple LLVM 5.0 -Language C++ settings
- I changed Other Linker flags under Build Settings->Linking to use -libstdc++
(instead of lstdc++)
- I ensured libstdc++.dylib was included under Build Phases
Now I get "Apple Mach-O Linker Error" ld: library not found for -libstdc++
有没有办法可以通过命令行查找来检查 libstdc++.dylib 是否存在,然后在我的项目中设置/包含它?这可能不是一个理想的方法,但我需要解决这个问题!
【问题讨论】:
Xcode 似乎在抱怨 Foundation 类...这可能是一个显而易见的问题,但 Foundation 框架是否正确链接到您的项目? 其实我忘了添加其余的行。是的,在我添加 Omniture 调用和库之前,代码构建和运行都很好......在错误堆栈的顶部(底部)是 Omniture 类(添加到上面的跟踪中) 您是否尝试将libOmnitureAppMeasurement-iPhoneSimulator.a
的路径添加到项目的“其他链接器标志”设置中? (也称为OTHER_LDFLAGS
)。我了解到您为标题搜索路径做了必要的步骤,但您可能错过了这一步骤?
另一件事:你的库是为什么 iOS SDK 构建的?它也可能是接下来要看的东西:库和您的项目之间的不同基础 SDK...
专为 iOS 6 和 iOS 7 构建。感谢有关其他链接器标志的建议:当其他链接器标志设置为 -lstdc++ 时,我收到上述错误。当我将其他链接器标志设置为 -libstdc++ 时,我只收到一个错误“找不到 libstdc++ 的库”
【参考方案1】:
发现Adobe Analytics API已经大修,新的API是AdobeMobileLibrary-4.0.2-iOS.zip
在: https://developer.omniture.com/en_US/gallery/app-measurement-for-ios
用法是一种不同的风格,遵循它构建和运行的文档就可以了。 看来 libOmnitureAppMeasurement.... 已被弃用。
【讨论】:
以上是关于与 libOmnitureAppMeasurement-iPhoneSimulator.a 链接的 iOS 未定义符号错误的主要内容,如果未能解决你的问题,请参考以下文章