2014-11-04 52 views
0

这里是我的代码:GCC:错误:libhello.so:没有这样的文件或目录

// hello.c 
#include<stdio.h> 

int main(int argc, char **argv) { 
    return (0); 
} 

我在终端上键入gcc hello.c -o -shared libhello.so并获得:

gcc: error: libhello.so: No such file or directory 

问题:如何编译.c文件到.so文件与一个命令行

更新:如果我用gcc hello.c -shared -o libhello.so修复它,但我只是有些困惑,为什么错误信息是“gcc:error:libhello.so:没有这样的文件或目录”,而不是“gcc:error:libhello.so:没有这样的文件或目录'-shared'“

+0

'gcc hello.c -o -shared libhello.so'的意思是“编译文件'hello.c'和'libhello.so',并将结果放入文件'-shared'”。由于输出文件将在编译期间创建,因此编译器不会发出缺少警告。然而,源文件的存在对于编译成功是必要的,因此会发出错误消息。 – 2014-11-04 09:53:12

回答

1

顺便说一句,共享库应该包含position independent code。因此,与

gcc -Wall -fPIC -shared -O -g hello.c -o libhello.so 

见编译它也thisthat答案。

而共享对象应该(近)从不main函数。

PS。至gcc的参数顺序很重要!

+0

有关创建DLL的订单的任何建议? – Royi 2017-10-11 22:33:33

+0

DLL是Windows特定的。您需要阅读文档(特别是链接器)。 – 2017-10-12 05:02:44

+0

假设它是通用共享库。例如,我应该在创建o文件和共享库时还是仅在其中一个步骤中使用优化标志?谢谢。 – Royi 2017-10-12 09:20:21

1

输出文件的名称必须直接跟在-o之后。试试这个:

gcc hello.c -shared -o libhello.so 
0

我不知道你为什么这么做。但也许gcc hello.c -shared -o libhello.so

相关问题