求助:抓狂的 $UNIX2003 后缀

2012-05-30 00:30:31 +08:00
 Elfe
产品中有一部分 iPhone 和 Android 共享代码是C++的,对iphone 主项目来说就是生成成.a文件后加到Frameworks中。编译、链接通过,在手机上调试一切正常,在模拟器上调试 crash, 错误是Detected an attempt to call a symbol in system libraries that is not present on the iPhone: sleep$UNIX2003 called from function _ZN17LiteSemaphoreImpl8sem_waitEPS_ in image TouchPalDialer. 这是共享代码中的一行,用到了 sleep 函数。

搜到这个 http://stackoverflow.com/questions/8732393/code-coverage-with-xcode-4-2-missing-files/8733416#8733416 照着在共享代码中加入 sleep$UNIX2003 的定义,无效。

另外搜到很多都说是模拟器版本的问题。
我尝试着把Build SDK 和 Deployment Target 都设为 5.1,可是还没有用
网上有说这是4.1之后的问题,换了老版本模拟器就好了。可我的 XCode 是 4.3.2 版本的,在 Preferences -》downloads 中根本找不到4.3 以前的模拟器,

有谁知道如何解决这个问题么?
3869 次点击
所在节点    iDev
2 条回复
Elfe
2012-05-30 14:16:14 +08:00
好吧搞定了。那个sleep$UNIX2003 需要加在.c 文件中,其它的如.cpp,.m,.mm,.h啥的都无效
Elfe
2012-05-30 16:17:39 +08:00
更好的解决方法如这里所说 http://stackoverflow.com/questions/1620375/cross-compile-libgcrypt-for-the-iphone-linker-error-cant-seem-to-find-fwri
对模拟器版本的,编译时加上 -mmacosx-version-min=10.3
花了点时间读http://developer.apple.com/library/mac/#releasenotes/Darwin/SymbolVariantsRelNotes/_index.html 总算明白了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/37804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX