2016-09-16 5 views
1

私はCコードを持っています。共有オブジェクトを作成し、そのオブジェクトをRに動的にロードすることで、Rからその関数を呼び出したいと思います。RCコードから共有オブジェクトを作成するR

R CMD SHLIB myfile.c 

と一般的な方法は次のとおりです:ある

gcc -c -Wall -Werror -fpic myfile.c 
gcc -shared -o myfile.so myfile.o 

私はR.ザ・における使用量の面内のコードのものと異なる部分によって作成された2つのmyfile.soのファイルの間に違いがあるかどうかを疑問に思って2つのファイルのサイズはかなり異なります(17KBと32 KB)。混乱します私。

答えて

1

あなたが

gcc -c -Wall -Werror -fpic myfile.c 
gcc -shared -o myfile.so myfile.o 

あなたはあなたがR CMD SHLIBはなぜ画面に印刷されているものを見ていないなどの最適化フラグ-O2、デバッグフラグ-g、同様に、かかるいくつかのフラグを欠場:

R CMD SHLIB myfile.c 

私が言及したフラグは、コードサイズとコンパイルされたコードの効率に影響します。結果のオブジェクトコードは異なります。あなたは逆アセンブラを使用することができます:

objdump -d myfile.so 

アセンブリコードとコードサイズを確認することができます。

gcc -S -Wall -Werror -fpic myfile.c 

を使用して、(読み取り可能な)アセンブリコードを確認することもできます。 -O2を使用するかどうかには大きな違いがあります。


Godbolt compiler exploreはGUI対話型アセンブラです。左側のウィンドウでCコードを入力し、コンパイラ、コンパイルフラグ、出力表示設定などを選択すると、右側のウィンドウにアセンブリコードが生成されます。これはHPCコード作成者がコードを評価し最適化するのに非常に便利です。あなたにとって、これはオブジェクトコードの違いを比較する便利な方法です。

関連する問題