2

我正在为其他 iOS 开发人员开发一个框架,并且我使用 boost 作为依赖项。我正在创建一个 boost.framework,其中包含 arm6、arm7、arm7s、arm64、i386 和 x86_64 的库(胖库)。编译和链接似乎工作正常,但在模拟器中使用我的库和 XCode 5.0.2 中的 boost.framework 会导致以下错误

Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
pthread_cond_init$UNIX2003 called from function _ZN5boost18condition_variableC2Ev

但是,在设备上部署应用程序根本不会产生任何问题。

环顾四周后,我发现了一个StackOverflow 条目,解释他的$UNIX2003函数名称是 OSX 库的一部分。基于此,我检查了库的链接,只有库的 i386 部分与这些$UNIX2003部分链接(这与Apple 自己的描述一致)。arm* 架构使用的是无后缀版本。

我的问题是,我该怎么做才能让它在模拟器上运行?我是否需要使用特定标志重新编译 boost?有没有让模拟器闭嘴的选项?或者至少我有办法告诉模拟器使用实际的设备库而不是 i386 的?

有可能$UNIX2003自己编写这些函数,然后委托给真正的函数。但是由于有很多函数调用我宁愿不这样做,特别是因为使用我的框架的开发人员需要做同样的事情我猜(我想避免)。

4

1 回答 1

1

在遇到一个无关邮件列表的讨论后,我发现了原来的罪魁祸首:boost 库是针对 Mac OS X 版本(我猜是 libc++)构建的,而不是针对它的 iPhone 模拟器版本。修复此问题会以正确的格式生成框架,并且仅包含指向正确版本的系统调用的链接。

于 2013-11-11T09:56:47.767 回答