美文网首页
Objective-C编译成C++代码报错(clang使用)

Objective-C编译成C++代码报错(clang使用)

作者: 科技农民工 | 来源:发表于2019-04-18 23:40 被阅读0次

    看很多的大牛在博客里写的runtime各种原理实现,剖析各种实现。直接使用clang来获取c++源码,但是自己实践的情况下总是在一些细节问题,例如:

    clang -rewrite-objc xxx.m
    

    这个就是一个由.m 转换为.cpp文件的clang命令,但是自己实际操作时是这样子的:


    屏幕快照 2019-04-18 下午11.03.20.png

    顿时一阵抓狂,难道是我操作有问题?不应该啊,好多的博客都是这样的,但是具体的是为什么不行呢?遂在Google上找到各种类似的解决办法,但都没有对症下药,无论尝试那种办法都报'UIKit/UIKit.h' file not found的错。

    这个具体事为什么呢?
    实在想不到更好的方式,只能是慢慢思考这个问题,从字面意思来说就是依赖的库并没有找到。那这样的思路是不是就是依赖一下相应的库就可以呢?依赖的库也都是xcode自动打包好的,但是在xcode的目录下是有相应的sdk的。所以进行一下试想将sdk一起加入到编译中。由此从网上找了一些关于类似的方式:

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

    实践结果如下


    屏幕快照 2019-04-18 下午11.23.30.png

    很遗憾,这种方式还是存在一些问题,仔细查看相关报错信息:

    屏幕快照 2019-04-18 下午11.32.44.png

    这个UIWebview在Mac下是不可用的。既然不让这么粗暴的方式调用,突然想起熟悉又陌生的xcrun,那么结合xcrun呢?xcrun只有之前写自动化测试脚本的时候用到过,知道他的强大。完全可以使用这个工具完成这个编译工作,一顿操作过后......

    // 模拟器的情况下
    xcrun -sdk iphonesimulator clang -rewrite-objc xxx.m
    
    //真机的情况下
     xcrun -sdk iphoneos clang -rewrite-objc xxx.m
    
    

    效果如下:


    屏幕快照 2019-04-18 下午11.26.38.png

    真香定理,到此,这么一个简单的命令操作完毕,可以继续分析相关的底层实现原理。其实大部分mac下的开发,根据报错信息经过分析信息都可以分析个八九不离十,在结合上面向百度编程的思路,大部分都是没啥问题。如果没有报错信息是最坑的。下次在继续写一下最近遇到的坑。

    相关文章

      网友评论

          本文标题:Objective-C编译成C++代码报错(clang使用)

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