c++ - 在 iOS 模拟器 : Linking with Unix Conformance Layer 中使用库

标签 c++ ios xcode linker ios-simulator

我正在为其他 iOS 开发人员开发一个框架,并且我使用 boost 作为依赖项。我正在创建一个包含 arm6、arm7、arm7s、arm64、i386 和 x86_64 的库(fat 库)的 boost.framework。编译和链接似乎工作正常,但在模拟器中使用我的库和 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 entry解释说他的 $UNIX2003 函数名是 OSX 库的一部分。基于此,我检查了库的链接,只有库的 i386 部分链接到 $UNIX2003 部分(符合 Apple's own description )。 arm* 架构使用的是无后缀版本。

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

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

最佳答案

遇到a discussion on an unrelated mailing list之后,我找到了最初的罪魁祸首:boost 库是针对 Mac OS X 版本(我猜是 libc++)构建的,而不是针对它的 iPhone 模拟器版本构建的。解决这个问题会以正确的格式生成框架,并且只包含指向正确版本的系统调用的链接。

关于c++ - 在 iOS 模拟器 : Linking with Unix Conformance Layer 中使用库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19857600/

相关文章:

c++ - 链表的数组实现

iphone - 关于iPhone中的正则表达式

ios - 无法通过移动它们来重新排列 UICollectionView 中的单元格?

ios - 使用 Core Text 重新实现 UITextView 和 UITextField

php - iPhone xCode 插入 mySQL

c++ - 在不使用专门化语法的情况下,为不同类型实现不同类型的模板类方法是否有效?

c++ 无法清除 inputStream

c++ - 为什么 "int *find(const vector<int> &vec, int value)"会给我一个无效的转换错误?

iPhone : insert a character inside a dynamic string

ios - Swift 默认的 AlertViewController 打破约束