【问题标题】:XCode build fail: C++ lib within iOS lib within (test) consumer appXCode 构建失败:(测试)消费者应用程序中的 iOS 库中的 C++ 库
【发布时间】:2018-03-18 14:41:17
【问题描述】:

我有三层:
- 核心 C++ 引擎
- iOS 音频包装器
- 演示 iOS 消费者项目

所以我是:
1)编译engine.a,它链接到加速框架。

2) 编译 wrapper.a,依赖于引擎并链接到 engine.a 和 加速框架强>。

到目前为止一切顺利。我可以建立wrapper.a。但看起来有些不对劲。我的包装代码正在使用 CoreAudio 调用。它正在获取实时麦克风数据。应该是报错吧?它应该要求我链接 AudioToolbox 或 AudioUnit 框架。

所以我不明白为什么那个库甚至可以编译。

3) 创建一个新的 iOS 项目,链接到 wrapper.a。

现在我遇到了 30 多个构建错误:

```
架构 x86_64 的未定义符号: “vtable for std::exception”,引用自: libfftDecoder.a(FFTDecoder.o) 中的 std::__1::bad_function_call::bad_function_call() 注意:缺少 vtable 通常意味着第一个非内联虚成员函数没有定义。

“std::__1::__thread_struct::__thread_struct()”,引用自: std::__1::thread::thread(void (DecoderThread::&&)(), DecoderThread&&) 在 libfftDecoder.a(FFTDecoder.o)

“std::__1::__throw_system_error(int, char const*)”,引用自: std::__1::thread::thread(void (DecoderThread::&&)(), DecoderThread&&) 在 libfftDecoder.a(FFTDecoder.o) : ```

谁能提出可能是什么问题?第一个错误看起来像“未能处理 C++ 构造”。

我应该提到,Xcode 在这个任务的上下文中非常令人失望。我在“构建阶段”选项卡中链接的项目并未一致地反映在相应项目的项目导航器的“框架”文件夹中。有时,即使构建成功,.a 也会显示为红色。

【问题讨论】:

  • PS 从什么时候 ``` 在 SO 上被破坏了?我尝试在上面使用它来将错误缩进为代码。

标签: xcode build static-libraries


【解决方案1】:

第一点(感谢#iphonedev Freenode 上的@wiliz)是静态库没有链接到某些东西的概念。所以我应该从我的 .a 文件中删除所有链接,并将所有依赖项放在我的消费者应用程序中。

问题在于该库包含已编译的 C++ 代码。消费者应用程序没有任何 .mm 文件。所以它没有在任何地方使用 ObjC++。所以它没有链接到 C++ 标准库。

只需将其中一个 .m 文件(例如 ViewController.m)重命名为 .mm 即可解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    • 2022-01-09
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多