在CentOS系统下,使用GCC编译动态库(共享库)的步骤如下:
准备源代码文件。假设你有两个源代码文件:libsource1.c 和 libsource2.c。
创建头文件。为了使其他程序能够使用你的动态库,你需要提供头文件。创建一个名为 libheader.h 的头文件,其中包含源代码文件中所有需要暴露给外部使用的函数和类型的声明。
编译源代码文件为位置无关代码(PIC)。使用 -fPIC 选项编译源代码文件,生成位置无关代码(PIC)目标文件。这对于创建共享库是必需的。
gcc -c -fPIC libsource1.c -o libsource1.o
gcc -c -fPIC libsource2.c -o libsource2.o
使用 gcc 的 -shared 选项创建共享库。将生成的目标文件链接为一个共享库,并指定输出文件名。例如,创建名为 libmylibrary.so 的共享库:
gcc -shared libsource1.o libsource2.o -o libmylibrary.so
如果你想为共享库指定一个特定的版本号,可以使用 -Wl,soname 选项:
gcc -shared libsource1.o libsource2.o -o libmylibrary.so -Wl,soname,libmylibrary.so.1
安装共享库。将创建的共享库复制到一个系统库目录(如 /usr/lib 或 /usr/local/lib),并更新库缓存:
sudo cp libmylibrary.so /usr/local/lib/
sudo ldconfig
使用动态库。现在你可以在其他程序中使用 -L 选项指定库搜索路径,使用 -l 选项链接你的共享库。例如,在 main.c 中使用 libmylibrary.so:
#include "libheader.h"
int main() {
my_function();
return 0;
}
编译 main.c 时,指定库搜索路径和链接共享库:
gcc main.c -L/usr/local/lib -lmylibrary -o main
运行程序。使用 LD_LIBRARY_PATH 环境变量指定库搜索路径,然后运行生成的可执行文件:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./main
这就是在CentOS系统下使用GCC编译动态库的方法。