【问题标题】:Unit test unresolved symbol when using Objective-C++使用 Objective-C++ 时单元测试未解析的符号
【发布时间】:2013-06-21 05:53:11
【问题描述】:

我正在尝试为我的项目创建单元测试,我有几个项目的工作区,其中包含数十个静态库和应用程序。因此,我在这个工作区中为静态库创建了一个新项目,并向其中添加了 Cocoa Touch UnitTest 包。然后我为这个工作区中的一个库中的一个函数添加了一个测试,比如说库 X,我还向我的单元测试包添加了链接依赖项到 lib X。但是当我运行单元测试时 (Cmd + U)。我收到链接器错误:

Undefined symbols for architecture i386:"_OSVersion", referencedfrom:-[MyUnitTest testMethodFromLibX] in MyUnitTestTest.o "_methodFromLibX", referenced symbol(s) not found for architecture i386

为什么测试包没有与库 X 链接?我可以在 build 文件夹中看到 libX.a 和 MyUnitTests.octet。

【问题讨论】:

    标签: objective-c xcode unit-testing objective-c++


    【解决方案1】:

    好的,谢谢大家,我找到了问题的原因——我的 libX 是 Objective-C++ 库,所以链接器破坏了所有名称,但我的单元测试是 Objective-C 库,所以当它链接时显然不能按名称查找方法或类,因为链接不同。因此,我将单元测试转换为 Objective-C++ 库(只是更改了 *.m -> *.mm)并且一切正常!

    【讨论】:

      【解决方案2】:

      单元测试在模拟器中运行,因此每个库都需要有 x386 版本。您可以使用命令行来检查每个 - 我相信“file lib.a”会这样做,但快速谷歌搜索会找到名称。

      【讨论】:

      • 谢谢大卫,问题是我的 iOS 应用程序中使用了库 X,它在模拟器下成功运行,所以我很确定 lib X 有 x386 版本。
      • 如果你可以上传一个简化的演示项目,我和其他人可以看到问题所在。
      猜你喜欢
      • 2020-10-31
      • 2018-05-10
      • 1970-01-01
      • 2022-10-09
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多