iOS OC に対応して生成された C++ コードを表示する

デスクトップに main.m ファイルを作成します。端末がデスクトップに入ったときの main.m ファイルのコードは cd Desktop
次のとおりです。

#import <Foundation/Foundation.h>

int main(int argc, char * argv[]) {
    @autoreleasepool {
        __block int count = 10;
        void (^ blk)(void) = ^(){
            count ++;
            NSLog(@"Block:%d", count);
        };
        count ++;
        NSLog(@"%d", count);
 
        blk();
        
        return 0;
    }
}

実行しclang -fobjc-arc -framework Foundation main.m -o main
て実行可能ファイルを取得し、ダブルクリックして実行結果を確認します

Last login: Mon Oct 15 17:25:04 on ttys001
/Users/wei/Desktop/main ; exit;
➜  ~ /Users/wei/Desktop/main ; exit;
2018-10-15 17:40:50.588 main[62846:2232729] 11
2018-10-15 17:40:50.588 main[62846:2232729] Block:12

[进程已完成]


コマンド分析:

-fobjc-arc は、コンパイルで ARC 機能をサポートする必要があることを示します。

-framework Foundation は、文字列、配列、辞書などの多くの基本クラスを定義する Foundation フレームワークを参照することを意味します。

次の mian.m はコンパイルするソース コード ファイルの名前です。

-o main は、出力される実行可能ファイルのファイル名が main であることを示します。

clang -rewrite-objc main.m
main.m の cpp ファイル main.cppを実行します 
。main.cpp のコードは、コンパイラが main.m を変換した結果です。
ps: .m のコードは 30 行未満ですが、.cpp には 100,000 行近くあります。 ..

実行中にエラーが報告された場合 clang -rewrite-objc main.m 、たとえば

main.m:9:9: fatal error: 'UIKit/UIKit.h' file not found
#import <UIKit/UIKit.h>
        ^~~~~~~~~~~~~~~
1 error generated.

埋め込む clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/xxxxx.m

補足知識

取得した cpp ファイルは実際には C++ コード ファイルですが、異なるプラットフォームでは異なるコードが実行されます。64 ビット iPhone で実行される cpp を生成する必要がある場合、コマンドは次のとおりです。
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp

上記のパラメータについて説明します。
xcrun: xc は Xcode の略で、Xcode 上で実行されている iphoneos を指します。
iPhone システム
xcrun -sdk iphoneos: Xcode を通じて iPhone OS に指定
-arch arm64: 64 ビット アーキテクチャ
-rewrite-objc: OC ファイルを書き換えます
-o main-arm64.cpp: main-arm64.cpp という名前のファイルに出力します。

アーキテクチャコードの説明:
arm64: 64 ビット
armv7: 32 ビット
i386: シミュレータ

こっそり教えますが、この方法で生成される cpp のコード量は約 30,000 行で、上記の 100,000 行に比べればかなり手間が省けます。

2018.11.30

変換する際には、 cannot create __weak reference in file using manual reference
別のパラメータを追加する必要があります。完全なコマンドは次のとおりです。
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 main.m -o main-arm64.cpp
実際には、2 つのパラメータが追加されます。

  • -fobjc-arc は、  ARC 環境でコンパイルすることを意味します。
  • -fobjc-runtime=ios-8.0.0 

おすすめ

転載: blog.csdn.net/yezuiqingxin/article/details/119575117