2017-07-14 113 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