LD_LIBRARY_PATH与LIBRARY_PATH

我正在构build一个简单的C ++程序,我想临时replace一个系统提供的共享库和更新的版本,用于开发和testing。

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

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

我期望这样做,因为根据ld手册页:

链接器使用以下searchpath来查找所需的共享库:…对于本机链接器,环境variables“LD_LIBRARY_PATH”的内容…

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

根据GCC手册:

LIBRARY_PATH的值是一个以冒号分隔的目录列表,非常像PATH。 当configuration为本机编译器时,GCC在search特殊链接器文件时尝试search指定的目录,如果找不到,则使用GCC_EXEC_PREFIX。 在使用GCC进行链接时,也会在为-l选项search普通库时使用这些目录(但使用-L指定的目录优先)。

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

但..

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

编译之前,gcc使用LIBRARY_PATH来search包含需要链接到程序的静态库的目录。

LD_LIBRARY_PATH用于在程序成功编译和链接后search包含共享库的目录。

编辑:如下所示,您的库可以是静态的或共享的。 如果它是静态的,那么代码被复制到你的程序中,并且在你的程序被编译和链接后你不需要search这个库。 如果你的库是共享的,那么它需要dynamic链接到你的程序,这就是LD_LIBRARY_PATH作用。

程序启动时searchLD_LIBRARY_PATHLIBRARY_PATH在链接时search。

由于我与gcc链接,为什么ld被调用,如错误消息所示?

gcc在链接模式下在内部调用ld。