linux中[gcc -shared -fPIC]的含义
linux在gcc编译时加上 -shared 参数时,目的是使源码编译成动态库 .so 文件;
而-fPIC的作用是 告知编译器 生成位置无关代码(编译产生的代码没有绝对位置,只有相对位置);从而可以在任意地方调用生成的动态库。
示例:
gcc fun.c -shared - fPIC -o libfun.so
如果代码没有错误,则可以在当前路径下生成libfunc.so文件;
此时此动态库还不能被正确的链接上,因为系统寻找链接库的路径不包含当前路径;需要将此so文件放到搜寻路径中,或者添加寻找路径;
默认查找的路径中有 /usr/lib 可以使用:
sudo cp libfunc.so /usr/lib/
将动态库复制到 /usr/lib目录中。
或 添加搜寻路径可以在环境变量 LIBRARY_PATH 中添加:
LIBRARY_PATH=$LIBRARY_PATH:.
这样就添加了[当前路径]为动态库的搜寻路径。( :为路径分割符 . 为当前路径 )
注意:修改了LIBRARY_PATH之后必须执行 export LIBRARY_PATH 才能生效,而且只能在当前终端生效。
在其他文件需要调用其中的函数时,编译时加上 -lfunc。
示例:
gcc main.c -lfun
即可生成链接了libfunc.so的可执行文件;