今天gcc链接编写的动态库时出错了,首先要搞清楚为什么出错,是命令错误还是路径问题或者是库不对应。
ls命令查看当前目录下的动态运行库为libtest.so
然后我执行编译命令时链接动态库
-L 表示链接动态库的路径
-L. 表示动态库在当前路径下
-l后边加动态库的名字,应该省略库的lib三个字符,比如链接libhello.so时只需要-lhello即可
gcc test.c -o test -L. -ltest
编译成功之后运行test文件发现还会报错,提示找不到库?
此时有些人就有疑问了,为什么我gcc已经链接了当前目录的动态库运行时还会报错找不到库呢?
首先,不知道你们有没有注意到:如果gcc报错没有库时跟运行时报没有库时的错误是不一样的,因为gcc编译时我们只是将当前目录下的动态库链接到程序中了,它仅仅是告诉编译器我的库的位置在当前目录,让编译器链接库时在当前目录下找,如果不加-L.时,他会报错系统默认配置文件下/usr/bin/ld中没有这个库,但是系统在运行程序时它如果提示没有库,是因为在加载库时错误,没有库文件或者目录,打不开库。
知道问题之后发现,此时我们有两种方法,一、把库文件拷贝到系统查找库时的路径中,二、告诉系统把当前路径添加到系统环境变量中,让系统查找库时在这个路径下查找。
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ///注意有个. 代表当前路径,
//如果要添加其他路径只需要将.换成目标路径,
//这种方法只有临时有效,重启后丢失配置,
//如果需要一直保存此路径可以修改配置文件,
//具体方法在此不多做讲解,自行百度
此时再运行程序发现不会报错了
你学会了吗?