定义 a.h、a.c 如下:
a.h
#include <stdio.h> #include <stdlib.h> void FuncA();
a.c
#include "a.h" void FuncA() { printf("我是 a\n"); }
gcc -c -fpic a.c
指令在同级目录下生成 a.o 文件;gcc -shared a.o -o liba.so
指令在同级目录下生成了 liba.so 动态库。在 Linux 中动态库以 lib 作为前缀,以 .so 作为后缀,中间是库的名字,自己指定即可,即 libxxx.so。
假设有个文件 b.c,在该文件中通过引用 a.h 实现对 FuncA() 的调用:
b.c
#include "a.h" int main() { FuncA(); return ; }
export LD_LIBRARY_PATH="liba.so的绝对路径"
修改环境变量;source ~/.profile
或source ~/.bashrc
使修改环境变量的指令生效;gcc b.c -o b -L [liba.so的路径] -l a
链接动态库 liba.so
./b
运行程序,此时你会发现,程序成功运行并调用 FuncA()。参考资料: