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_PATH
, LIBRARY_PATH
在链接时search。
由于我与gcc链接,为什么ld被调用,如错误消息所示?
gcc在链接模式下在内部调用ld。