step1.首先生成与位置无关的代码 (生成与位置无关的.o)
gcc -fPIC -c *.c -I ../include/
step2.生成动态库
gcc -shared -o libMycalc.so *.o -I ../include
mv libMycalc.so ../lib
step3.用户结合main.c使用动态库、头文件进行编译,生成可执行文件
1.
gcc main.c ./lib/libMycalc.so -I ./include -o mysum
2.
gcc main.c -I ./include -L ./lib -l Mycalc -o mysum 也就是-I 头文件所在目录 -L 动态库所在的目录 -l 动态库名(掐头去尾) -o 可执行文件名
./mysum
发现报错了!这是为什么呢?如下图所示:
里面说libMycalc.so没有找到
解决动态库链接失败的问题
法1:临时设置
export LD_LIBRARY_PATH=./lib
法2:永久设置
首先,在家目录下找到.bashrc文件
sudo vi ./bashrc
在最后一行加上绝对路径:
export LD_LIBRARY_PATH=/home/shenhang/gcc_about/lib
然后重启终端就可以了。
法3:修改配置文件(最常用的方法)
- 需要找动态连接器的配置文件 – /etc/ld.so.conf
- 动态库的路径写到配置文件中 – 绝对路径
- 更新 – sudo ldconfig -v
sudo vi /etc/ld.so.conf
加一行绝对路径:/home/shenhang/gcc_about/lib
sudo ldconfig -v
这样就可以了。