【问题标题】:gcc: error: libhello.so: No such file or directorygcc:错误:libhello.so:没有这样的文件或目录
【发布时间】:2014-11-04 09:26:01
【问题描述】:

这是我的代码:

// 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: No such file or directory”,而不是“ gcc:错误:libhello.so:没有这样的文件或目录'-shared'”

【问题讨论】:

  • gcc hello.c -o -shared libhello.so 表示“编译文件hello.clibhello.so,并将结果放入文件-shared”。由于将在编译期间创建输出文件,因此编译器不会发出丢失该文件的警告。但是,源文件的存在是编译成功所必需的,因此会发出错误消息。

标签: c gcc


【解决方案1】:

顺便说一句,共享库应该包含position independent code。所以用

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

另请参阅 thisthat 答案。

共享对象应该(几乎)从不main函数。

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

【讨论】:

  • 关于创建 DLL 的顺序有什么建议吗?
  • DLL 是特定于 Windows 的。您需要阅读文档(尤其是您的链接器)。
  • 假设它是通用共享库。例如,我应该在创建 o 文件和共享库时都使用优化标志还是只在其中一个步骤上使用优化标志?谢谢。
  • 最好同时使用。但肯定是.o 文件。
【解决方案2】:

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

gcc hello.c -shared -o libhello.so

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 2022-10-24
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2016-05-21
      • 2018-08-06
      相关资源
      最近更新 更多