生成共享库的过程如下:
➜ 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
但是执行可执行文件时报错:无法链接到共享库。因此我们要运行共享库,一共有三种方式:
- 拷贝.so文件到系统共享库路径下,一般是/usr/lib
- 更改LD_LIBRARY_PATH
- ldconfig。配置/etc/ld.so.conf,ldconfig更新ld.so.cache
我们将生成的.so库拷贝到系统共享库路径下,就可以成功执行:
➜ test sudo cp libhello.so /usr/lib
➜ test ./main
hello world