LD_LIBRARY_PATH与LIBRARY_PATH?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

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

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

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

我期望能够工作,因为根据ld手册页:

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

然后我尝试设置LIBRARY_PATH,并且工作。

根据GCC手册:

LIBRARY_PATH的值是以冒号分隔的目录列表,很像PATH。当配置为本地编译器时,如果搜索特殊链接器文件(如果使用GCC_EXEC_PREFIX找不到它们),GCC将尝试搜索特定链接器文件时指定的目录。在使用GCC进行链接时,在为-l选项搜索普通库时也会使用这些目录(但使用-L指定的目录首先出现)。

正如(GCC)手册所建议的,LIBRARY_PATH的工作原理是因为我与GCC链接。

但..

  • 由于我与gcc链接,为什么ld被调用,如错误消息所示?
  • 有两个变量用于同一目的有什么意义?还有其他的区别吗?
提问于
用户回答回答于

LIBRARY_PATHgcc在编译之前使用它来搜索包含需要链接到程序的静态库的目录。

LD_LIBRARY_PATH被程序用来在成功编译和链接后搜索包含共享库的目录。

用户回答回答于

LD_LIBRARY_PATH在程序启动时LIBRARY_PATH搜索,在链接时搜索。

扫码关注云+社区