如何从C程序的编译中生成共享库(.so
)文件。我想说如果我编译一个C程序,我会得到a.out
。而不是我怎么能得到.so文件。
答案 0 :(得分:4)
要生成共享库,首先需要使用-fPIC(位置无关代码)标志编译C代码。
gcc -c -fPIC file.c -o file.o
这将生成一个目标文件(.o),现在你接受并创建.so文件:
gcc file.o -shared -o lib_file.so
答案 1 :(得分:4)
要首先生成共享库,必须通过指定.o
标志来创建正常的二进制-fPIC
文件,以获取与位置无关的代码。这是必要的,因为库中的每个跳转或调用都将具有相对偏移量,并且当库被加载到内存以供进程使用时可用于重定位(读取:更少优化但可用于任何地址)
然后再次使用gcc
指定要从目标文件创建库:
gcc -shared -o library_name.so a.o b.o