本文来自投稿,不代表长河网立场,转载请注明出处: http://www.changhe99.com/a/80wVYV7rzk.html
在iOS 7或iPhone 5S上编译C++
各位编程极客可能发现,在有已经越狱的iOS7或者iPhone5S上编译C++程序时,按照以前的教程进行操作会出现各种问题。 您的设备必须已经越狱。GCC/G++可能会出现以下问题: fatalerror:\'iostream\'filenotfound std::coutisnotdefined Illegealinstruction:4 (有的sed-i打补丁之后仍出错) ld:unknown/unsupportedarchitecturenamefor:-archarmClang++还可能出现以下问题: librarynotfoundfor-lstdc++ filenotfound:/usr/lib/system/libcache.dylibforarchitecturearmv7 这些问题出现的原因一是iOS7的dylib变化比较大,二是iPhone5S采用了64位CPU。以下是解决的方法。 这里分4点。一、下载合适版本的Clang、GCC 这里推荐大家去另一个帖子下载整套iPhone编译环境。这个环境里面的配置在iOS7和iPhone5S上面还是不会出现任何问题的。最大的好处就是再也不会出现Illegealinstruction:4问题了。 详见http://bbs.weiphone.com/forum.php?mod=viewthread&tid=5259660&extra=page%3D&page=1&mobile=no 但是这个帖子下到的文件只能提供编译环境,不含有iOS7的头文件或者链接库文件。 注意:你还需要执行以下命令: mvtheos/var/cd/var/theos/makefiles/targetsln-sDarwin-armDarwin-arm64cd/var/theos/makefiles/platformln-sDarwin-armDarwin-arm64killallSpringBoard 二、导入iOS7的头文件和链接库 这个时候如果把别的旧帖子上的C++头文件等导入手机,使用GCC编译C文件就应该已经没有问题了,但是就是不能编译C++文件。 所以我们需要得到最新的iOS7版本的这些文件。 由于Apple平台上的头文件和链接库文件是受到法律保护的,这里我不能提供下载链接。大家需要自己安装MacOS和Xcode,并提取相应文件。而且,如果只需要提取文件的话,大家不需要搞驱动神马的,连显卡都不用哦~ 具体的教程,Google一下你就知道。这里我提一下最需要提取的目录: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/ 其实最好还是把整个/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/都提取出来,万一以后发现有用呢?三、到了这里,其实事情开始显而易见了…… 首先我们试着给GCC/G++指定头文件、库文件目录,但是发现GCC/G++在链接的时候会报错: ld:unknown/unsupportedarchitecturenamefor:-archarm 而且,这种错误用各种修补方法都难以避免。另外,Clang在Apple平台上本身就比GCC/G++更猛。所以我们干脆放弃GCC/G++,转战Clang++。 然后就是根据Clang++的报错,探索Clang++需要的文件在哪里的过程,相信各位用find可以轻松的找到需要引用的目录。 最后,应该执行的命令如下:yuzhongzhide-iPhone:/var/mobile/MkIPA/test-cpproot#clang++a.cpp-I/var/sdk/v7-include/c++/4.2.1/-L/var/sdk/v7-lib/-L/var/sdk/v7-lib/system/yuzhongzhide-iPhone:/var/mobile/MkIPA/test-cpproot#./a.outHello!yuzhongzhide-iPhone:/var/mobile/MkIPA/test-cpproot#cata.cpp#includeusingnamespacestd;intmain(){ cout
赞
(0)