- 99 名前:デフォルトの名無しさん mailto:sage [2023/08/02(水) 00:59:42.14 ID:NJTTLLY6.net]
- clangとgccで上手くいった話は
rustcとgccにしても当然上手くいく 今度はRustで関数fooだけのfoo.rsを用意 (区別できるように掛け算に変えた) $ cat foo.rs #[no_mangle] pub extern "C" fn foo(a: i32, b: i32) -> i32 { a * b } 念のためfoo.oを削除しておく $ rm foo.o そしてrustcでコンパイルしてオブジェクトファイル生成 $ rustc -O --emit obj --crate-type staticlib foo.rs さっきと同様にオブジェクトファイルfoo.oが出来ている $ ls foo.o foo.o 再び全く同じくgccでmain.cをコンパイルして(rustcで作った)foo.oもリンクして実行ファイル生成 $ gcc -o main main.c foo.o 無事に掛け算が実行できました $ ./main ret = 200 つまりRustで書かれたコードとその生成オブジェクトファイルは 何の問題もなくgccでコンパイルしたC言語コードから呼び出せる (もちろん逆向きもOK)
|

|