【问题标题】:Generating .so file生成.so文件
【发布时间】:2017-07-14 13:09:22
【问题描述】:

我有文件main.c,我想创建main.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。 但是,我不确定我是否使用了正确的命令。上面的命令正确吗?

然后,我尝试了以下命令来生成 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

以上哪个命令是正确的? 请帮忙

【问题讨论】:

  • 我用gcc -x c++ -I. -L. -lCmodel -Wl,-rpath,. -o main.o main.c编译执行main.c文件
  • 这显然不是编译为 C,而是 C++,一种不同的语言。使用正确的标签。为什么你对 C++ 代码使用 .c 文件扩展名?使用 .cpp.c++ 并将其余部分留给 gcc 前端。
  • 这是一个 c 文件而不是 cpp 文件。所以,我使用 .c 作为扩展名。
  • 您编译为 C++,这是一种不同的语言!您的编辑更改了问题,使答案没有上下文。这是不允许的;回滚。阅读How to Ask 并获取tour。并阅读标签维基并学习语言以查看差异。
  • 嗨奥拉夫,我试图提到我已经根据我之前的评论更改了 qn。但是由于 5 分钟的限制,我不能这样做。

标签: c++ gcc dependencies dynamic-linking .so


【解决方案1】:

包含main 函数的文件不应是共享库。它是应用程序的入口点,因此应将其链接为可执行文件。

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

【讨论】:

  • 我在 SystemVerilog Testbech 中使用包含 main 函数的文件作为模型。它需要一个“.so”文件并通过 DPI 进行通信。
猜你喜欢
  • 2013-12-14
  • 2014-10-16
  • 2017-11-14
  • 2015-12-03
  • 1970-01-01
  • 2019-10-14
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多