【发布时间】: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.4 和libBmodelso.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