美文网首页八宝粥iOS开发笔记iOS开发
Objective-C编译成C++代码报错

Objective-C编译成C++代码报错

作者: valentizx | 来源:发表于2016-06-03 10:54 被阅读3176次

由于想了解OC通过runtime机制转成的C++代码是什么样子的,在进入项目目录中,执行cc -rewrite-objc ViewController.m时如下错:

In file included from ViewController.m:9:
**./ViewController.h:9:9: ****fatal error: ****'UIKit/UIKit.h' file not found**
#import <UIKit/UIKit.h>
**        ^**
1 error generated.
fuck

遂在Google上找到各种类似的解决办法,但都没有对症下药,无论尝试那种办法都报'UIKit/UIKit.h' file not found的错。
但最终还是摸索出解决办法,就是使用:

clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxxxx.m

当然,不能每次都输入这么长的路径和命令,可通过alias简化工作,步骤:

  1. 进入终端,键入命令 vim ~/.bash_profile
  2. 在vim界面输入i进入编辑编辑状态并且键入:alias rewriteoc='clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk'
  3. 键入完毕,点esc退出编辑状态,再键入:wq退出vim并保存,执行source ~/.bash_profile<-这句一定要执行,执行才会生效
    图例:
alias建别名 运行~/.bash_profile

然后进入项目目录,找到你想要编译的文件,执行rewriteoc xxx.m即可成功,图例

激动又紧张 成功

最后感受下这浓浓的情谊:


Fuck

相关文章

网友评论

  • 穿越地平线的渴望__:太给力了赞👍👍
  • 需要药:终端输入rewriteoc xx.m出现这个警告:
    clang: warning: using sysroot for 'iPhoneSimulator' but targeting 'MacOSX'
  • 哈哈哈我的简书账号:不行,咋做的啊
    哈哈哈我的简书账号:error: cannot create __weak reference because the current deployment target does not support weak
    references
    哈哈哈我的简书账号:@VaLenTi但是weak类型的怎么编译出错啦
    valentizx:我这个已经是小白的教程了。。。。。
  • d1bed0b7de6a:问下,rewrite遇到宏定义不能识别怎么解决? use of undeclared identifier 'kScreenWidth'
    d8537d582058:请问 你的问题解决了吗。
  • 杨淳引:棒棒哒
  • daydreamer狂想曲:__weak 类型的用clang编译,报error: cannot create __weak reference
    because the current deployment target does not support weak references 错,怎么破
    valentizx:@杨淳引 Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release 设置 YES
    valentizx:@daydreamer狂想曲 Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release 设置 YES
    杨淳引:@daydreamer狂想曲 请问有找到解决方法吗?
  • Aeron_Xie:666google了半天,终于在这儿找到解决办法了
  • zenon:赞,同样找了半天没有得到可靠答案。
    不过能解释下为啥不
    zenon:有心了,谢谢楼主。
    valentizx:@土土土土土土 如果我没记错的话 如果没有用UIKit框架的话 直接用网上的办法是可行的 直接就会编译出cpp文件,但是导入了UIKit就没辙了 只能用我写的那个(其他的办法我还没发现出来)
    valentizx:@土土土土土土 这个我当时还真有找到解释说明。。。但是忘记记下来了。。。刚才又去搜了一圈 找不到了 实在抱歉

本文标题:Objective-C编译成C++代码报错

本文链接:https://www.haomeiwen.com/subject/magkdttx.html