homerzhou 发表于 2013-12-10 18:50

关于 环境变量LD_LIBRARY_PATH

我 自己编了一个动态库libtest.so (里面只有一个函数 fun打印"hello wold")   
我现在 写一个main.c调用 这个fun, 需要用到 这个 动态库,

我 把 $LD_LIBRARY_PATH 在/etc/profile 设置了这个 目录   所以 这个时候 我 直接 gcc main.c -ltest能编译成功,运行成功

可是 奇怪的 是,我将 mv libtest.so libtest123.so这时候 按道理 gcc main.c -ltest123 应该也能编译成成功,可是不行,需要 gcc main.c -ltest123 -L. 才能编译 运行成功


我就在怀疑 是不是 有什么东西 缓存 在哪边 ,有可能是 什么 ld.so.cache可是我 运行一遍 sudo ldconfig 也还是一样,这 该 怎么办,

求 高手 ,跪谢

井蛙夏虫 发表于 2013-12-10 19:53

LD_LIBRARY_PATH只影响运行的时候,对编译时没作用。
你应当是别的地方有libtest.so

homerzhou 发表于 2013-12-11 10:35

只 影响运行的呀,这有点和我 一开始理解的 出入 好大,
刚找了下,确实 在/usr/local/lib/ 里面 有一个 libtest.so,
那我 该怎么 影响编译呢,就是 怎么 在编译的 时候不需要 加-L来增加寻找路径呢
是 使用 ldconfig 吗?
回复 2# 井蛙夏虫


   

homerzhou 发表于 2013-12-11 11:11

刚 有出来个小问题,不解,
我一个编译好的 a.out,要使用 libtest.so    我故意 没有在环境变量,和ldconfig中 设置, 可是 我只要 把 a.out 和 libtest.so 放在同一个路径(无论哪个文件夹)就可以 运行, 不放在一起,就没办法 正常运行
编译的是使用gcc main.c -L. -ltest
求解,难道 运行的时候 还有个默认搜索路径就是当前目录???
回复 2# 井蛙夏虫


   

井蛙夏虫 发表于 2013-12-11 19:41

本帖最后由 井蛙夏虫 于 2013-12-11 19:42 编辑

回复 4# homerzhou
ldconfig也是运行时的。编译时除了-L之外,我只知道更改ld链接控制脚本的方法,别的就不知道有没有了。
至于说默认搜索路径包括当前目录,不太清楚,在我的系统下测试了一下,不行。
页: [1]
查看完整版本: 关于 环境变量LD_LIBRARY_PATH