-I、-L和LD_LIBRARY_PATH

在编译的时候明明已经-L指定动态库的位置并且编译成功了,在运行的时候却告诉我找不到动态库?

如题,一个是编译的时候,一个是运行的时候。

LD_LIBRARY_PATH是一个环境变量,它的作用是让动态链接库加载器(ld.so)在运行时(run-time)有一个额外的选项,即增加一个搜索路径列表。注意,LD_LIBRARY_PATH是在运行时,才起作用。这个环境变量中,可以存储多个路径,用冒号分隔。它的厉害之处在于,搜索LD_LIBRARY_PATH所列路径的顺序,先于嵌入到二进制文件中的运行时搜索路径,也先于系统默认加载路径(如/usr/lib)[摘自:http://www.ituring.com.cn/article/22101]

动态装入器找到共享库要依靠两个文件 — /etc/ld.so.conf 和 /etc/ld.so.cache,在动态装入器能“看到”文件内信息之前,必须将它转换到 ld.so.cache 文件中。可以通过运行 ldconfig 命令做到这一点。当 ldconfig 操作结束时,您会有一个最新的 /etc/ld.so.cache 文件,它反映您对 /etc/ld.so.conf 所做的更改。从这一刻起,动态装入器在寻找共享库时会查看您在 /etc/ld.so.conf 中指定的所有新目录。 LD_LIBRARY_PATH则指示动态装入器首先检查某个目录。
[摘自[https://www.cnblogs.com/yigerendehaibian/p/8274426.html]

g++ -L:是在编译的时候,去-L指定的地方找库,-l库的名字

首先有默认环境变量知道默认搜索路径(C_INCLUDE_PATH、CPLUS_INCLUDE_PATH、链接库的不清楚,所指定的默认路径大概是: /lib /usr/lib /usr/local/lib 、/usr/include /usr/local/include之类的)
如果在上述路径中没有找到头文件或者链接库,就要配置-I,-L参数指定自己的头文件或者共享库位置

运行的时候也有默认寻找的共享库路径,在/etc/so.ld.conf 中配置,如果没有找到则可以配置环境变量LD_LIBRARY_PATH

自己配置的要先于默认路径搜索。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
原文:http://www.doc88.com/p-784388270492.html

猜你喜欢

转载自blog.csdn.net/u010931295/article/details/90728769
今日推荐