使用gcc命令行从.c文件构建.so文件

sas*_*alm 145 c linux gcc shared-libraries

我正在尝试为Linux动态库(.so文件)创建一个hello world项目.所以我有一个文件hello.c:

#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}
Run Code Online (Sandbox Code Playgroud)

如何hello()使用命令行中的gcc 创建导出的.so文件?

dre*_*ash 254

要生成共享库,首先需要使用-fPIC(位置无关代码)标志编译C代码.

gcc -c -fPIC hello.c -o hello.o
Run Code Online (Sandbox Code Playgroud)

这将生成一个目标文件(.o),现在你接受并创建.so文件:

gcc hello.o -shared -o libhello.so
Run Code Online (Sandbox Code Playgroud)

编辑:意见建议:

您可以使用

gcc -shared -o libhello.so -fPIC hello.c
Run Code Online (Sandbox Code Playgroud)

一步到位.- 乔纳森莱弗勒

我还建议添加-Wall以获取所有警告,并-g获取调试信息到您的gcc命令.- Basile Starynkevitch

  • 或者`gcc -shared -o libhello.so -fPIC hello.c`一步完成. (50认同)
  • 我还建议添加`-Wall`来获取所有警告,并使用`-g`来获取调试信息到你的`gcc`命令. (5认同)
  • @sashoalm` .o`文件基本上是源文件的目标文件,在将它们链接在一起之前,进入最终的可执行文件.因此,当您运行`gcc -o abc.c abc.o`时,将生成一个目标文件.然后您可以使用此`abc.o`文件来创建`.so`文件.要创建这么多文件,您只需要一个用.c`文件编写的正确c代码.PS:只是为了在评论中清除你的疑问. (3认同)