我正在为其他 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
自己编写这些函数,然后委托给真正的函数。但是由于有很多函数调用我宁愿不这样做,特别是因为使用我的框架的开发人员需要做同样的事情我猜(我想避免)。