生成共享库的过程如下:

➜  makefile gcc -Wall -c -fPIC hello.c              // 编译生成.o文件时一定要加上-fPIC选项
➜  makefile gcc -shared -fPIC hello.o -o libhello.so
➜  makefile ls -l libhello.so 
-rwxrwxr-x 1 menwen menwen 8024 7月  16 14:58 libhello.so
// -shared:生成共享库格式
// -fPIC:产生位置无关码(position independent code)

链接库生成可执行文件:

gcc -Wall -L. main.o -o main -lhello
➜  test ./main 
./main: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory

但是执行可执行文件时报错:无法链接到共享库。因此我们要运行共享库,一共有三种方式:

  1. 拷贝.so文件到系统共享库路径下,一般是/usr/lib
  2. 更改LD_LIBRARY_PATH
  3. ldconfig。配置/etc/ld.so.conf,ldconfig更新ld.so.cache

我们将生成的.so库拷贝到系统共享库路径下,就可以成功执行:

test sudo cp libhello.so /usr/lib
➜  test ./main
hello world