2017-07-14 198 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.4libBmodelso.11. 所有"*.so"文件存在於同一目錄中main.c

我用下面的命令生成目標文件

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

我看到生成了main.o。 但是,我不確定我是否使用了正確的命令。上述命令是否正確?

然後,我嘗試了以下commads產生main.so,

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 

了上述命令是正確的? 請幫忙

+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

這是一個c文件而不是cpp文件。所以,我用.c作爲擴展名。 – john

回答

0

包含main函數的文件不應該是共享庫。它是應用程序的入口點,因此它應該作爲可執行文件進行鏈接。

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

我使用包含SystemVerilog Testbech中的main函數的文件作爲模型。它需要一個「.so」文件並通過** DPI **進行通信。 – john