2017-07-14 13 views
-1

ファイルmain.cがあります。main.soを作成します。.soファイルを生成する

main.cは、libCmodel.soに依存します。

main.cは見え

よう
#include <stdio.h> 
#include "Cmodel.h" // Must include before Amodel and Bmodel 
#include "Amodel.h" 
#include "Bmodel.h" 

int main(){ 
.. 
return 0; 
} 
libCmodel.soファイルが libAmodel.so.4に依存し、 libBmodelso.11. すべて "*.so"ファイルは私は、次のコマンドを使用 main.c

と同じディレクトリに存在している、ということを観察することができ

オブジェクトファイルを生成する

gcc -x c++ -fPIC main.c -o main.o -c -I. 

main.oが生成されています。 しかし、正しいコマンドを使用したかどうかはわかりません。上記のコマンドは正しいですか?

その後、私は、上記のコマンドの

g++ -shared -o main.so main.o -L. -lCmodel 
g++ -shared -o main.so main.o -L. -lCmodel -lAmodel -lBmodel 
g++ -shared -o main.so main.o -L. -lCmodel -lAmodel.4 -lBmodel.11 
g++ -shared -o main.so main.o -L. -lCmodel -lAmodel.so.4 -lBmodel.so.11 

どちらが正しいか、main.soを生成するには、次のcommadsを試してみましたか? 助けてください

+0

gcc -x C++ -Iを使用しました。 -L。 -lCmodel -Wl、-rpath ,. -o main.o main.c'を実行してmain.cファイルをコンパイルして実行します – john

+0

これは明らかにC言語ではコンパイルされませんが、別の言語であるC++ではコンパイルされません。正しいタグを使用してください。なぜC++コードに '.c'ファイル拡張子を使用するのですか? '.cpp'や' .C++ 'を使い、残りはgccのフロントエンドに任せてください。 – Olaf

+0

これはcppファイルではないcファイルです。だから、私は拡張子として.cを使いました。 – john

答えて

0

あなたのmain関数を含むファイルは共有ライブラリであってはなりません。これはアプリケーションのエントリポイントなので、実行可能ファイルとしてリンクする必要があります。

gcc -x c++ -I. -L. -o main main.c -lCmodel 
+0

SystemVerilog Testbechの 'main'関数を含むファイルをモデルとして使用します。 「.so」ファイルが必要で、** DPI **を介して通信します。 – john

関連する問題