标签:动态链接库 error 生成 span 加载 flags 开发 rect bug
添加库文件路径:
1:导出环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/new_path
2:修改配置文件
ld.so.conf ld.so.conf.d/*
LIBRARY_PATH 程序编译期间查找动态链接库时指定的查找路径,编译期,开发阶段, 只影响静态链接库
LD_LIBRARY_PATH 程序加载运行期间,查找动态链接库的路径(except 默认路径)
指定动态连接器(ld)查找ELF可执行文件运行时所依赖的动态链接库(so)路径
ld(连接器)优先在该路径查找,若未找到,在标准库路径/lib /lib64 /usr/lib /usr/lib64 查找
gcc:
-shared 编译动态链接库文件
-static 编译选项加入-static表示寻找libtest.a(-ltest)
-g 可供调试用的可执行文件,可在gdb中运行,包含调试信息,运行效率低,文件变大,可用strip将debug信息删除,strip也会将正常编译的一些额外信息删除(如函数名),大小比正常编译生成的可执行文件还要小,strip a.out
-Wall 打开所有警告信息
-s gcc -s source_file.c --strip-all
-O 优化程序,优化后可能变小,速度提高 such as -O2 级别越高,越优化 -O3 可能会有bug
-I 头文件目录,优先级高于默认路径 -I /path 则寻找路径 /path --> /usr/include --> /usr/local/include -->/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include
-include 少用,一般在源码中指明
-L/path/libdir -l库名 在/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64中的库可以只用 -l参数
/usr/bin/cc -> gcc cc为gcc连接
/usr/bin/c++ /usr/bin/g++
gtk-config --libs --cflags 编译gtk程序 gcc gtktest.c `gtk-config --libs --cflags` 用于特定包
pkg-config 通用 pkg-config --list-all 查看所有支持包
pkg-config gtk+ --libs --cflags
gcc gtktest.c `pkg-config --libs --cflags`
编译时,指明库的绝对路径,一定有效. -lxxx -lxxx 单独指明库名,若不在默认路径,则需配合 -L指明路径
***********编译时,指明的是库的绝对路径,则链接成的可执行程序只会去编译时指定的绝对路径找库文件
自己编译的动态链接库,必须使用-lskew方式明确指定链接的库名
编译为动态链接库 gcc skew.c -shared -fPIC -o libskew.so 不使用-o选项 默认生产a.out
./a.out: error while loading shared libraries: libskew.so: cannot open shared object file: No such file or directory
此为执行阶段报错
solution:
①:向/etc/ld.so.conf添加libskew.so所在路径,ldconfig ,ldconfig -p|grep skew
②:新建/etc/ld.so.conf.d/skew.conf,并添加libskew.so所在路径, ldconfig ,ldconfig -p|grep skew
③:把libskew.so复制,或链接到/lib /lib64 /usr/lib /usr/lib64 下 ldconfig ********** 必须执行ldconfig,否则可能加载不到
/usr/local/lib /usr/local/lib64 并不在ldconfig默认路径内,可以ldconfig /usr/local/lib临时指出
⑤:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt 必须export,可能于子shell中执行
标签:动态链接库 error 生成 span 加载 flags 开发 rect bug
原文地址:https://www.cnblogs.com/dissipate/p/13264577.html