Objective-C 转 C++

最近想把OC转成C++代码研究一下,就搜索了一下结果发现文章内容都差不多,直接拿来用始终报错。最后综合了一下找到了解决办法,现在记录一下,如果对你有帮助那就是再好不过了(记得给个赞)。

打开终端cd到你要转换文件(xxx.m)的目录下,执行以下代码:

cc -rewrite-objc xxx.m   

运行结果:

这是什么鬼?原来 'UIKit/UIKit.h' 识别不了,继续查吧。一搜果真好多文章啊来复制粘贴一下。

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

运行又报错?到底问题出在了哪里?

解决方法

仔细看了上面的命令发现有一个sdk的版本信息(也就是 xxxx/iPhoneSimulator.sdk xxx.m)应该是这个sdk的版本不对造成的。

查看sdk的版本

打开终端执行一下命令

xcodebuild -showsdks

运行结果:



我们清楚的看到是iOS 12.1 (这个根据你电脑里的版本确定的)。

输入正确的指令
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk xxx.m

执行完毕我们会在我们的文件目录里看到增加了一个.cpp的文件,这个就是我们最终转化成的C++代码。


优化写法

为了避免每次转化代码都需要写这么长,可以进一步优化。

 vim ~/.bash_profile

执行以上命令进入编辑界面按i进入编辑状态输入以下内容(这个内容大部分系统已经写好,注意检查sdk的版本号位置),确认无误按esc 退出编辑状态,按 :wq 进行保存。

alias rewriteoc='clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk'

source ~/.bash_profile

下次想转化文件的时候直接cd到文件目录下执行即可。

rewriteoc xxx.m

参考

OC转成C/C++
使用clang将OC代码转为C/C++

你可能感兴趣的:(Objective-C 转 C++)