LD_LIBRARY_PATH vs LIBRARY_PATH

时间:2010-11-22 22:02:20

标签: gcc g++ ld

我正在构建一个简单的C ++程序,我想暂时用系统提供的共享库替换它的更新版本,以进行开发和测试。

我尝试设置LD_LIBRARY_PATH变量,但链接器(ld)失败了:

  

/ usr / bin / ld:找不到-lyaml-cpp

我希望这可以工作,因为根据ld手册页:

  

链接器使用以下搜索   找到所需共享的路径   库:...对于本机链接器,   环境变量的内容   “LD_LIBRARY_PATH” ...

然后我尝试设置LIBRARY_PATH,这很有效。

根据GCC手册:

  

的价值   LIBRARY_PATH是以冒号分隔的列表   目录,很像PATH。什么时候   配置为本机编译器,GCC   尝试这样指定的目录   搜索特殊链接器时   文件,如果找不到它们使用   GCC_EXEC_PREFIX。使用GCC进行链接   当使用时也使用这些目录   寻找普通的图书馆   -l选项(但目录   用-L指定为第一个。)

正如(GCC)手册所示,LIBRARY_PATH有效,因为我与GCC链接。

但是...

  • 由于我与gcc链接为什么ld是 被称为错误信息 建议?
  • 有什么意义 有两个变量服务相同 目的?还有别的吗? 差异?

3 个答案:

答案 0 :(得分:187)

gcc在编译之前使用

LIBRARY_PATH来搜索包含需要链接到程序的静态库和共享库的目录。

成功编译和链接后,程序使用

LD_LIBRARY_PATH来搜索包含共享库的目录。

编辑: 如下所述,您的库可以是静态的或共享的。如果它是静态的,则将代码复制到程序中,并且在编译和链接程序后不需要搜索库。如果你的图书馆是共享的,那么它需要动态链接到你的程序,那就是LD_LIBRARY_PATH发挥作用。

答案 1 :(得分:39)

程序启动时会搜索

LD_LIBRARY_PATH,在链接时搜索LIBRARY_PATH

来自comments的警告:

答案 2 :(得分:11)

  

因为我链接gcc为什么要调用ld,因为错误信息表明?

gcc在处于链接模式时会在内部调用ld。