LD _ LIBRARY _ PATH 与 LIBRARY _ PATH 的比较

我正在构建一个简单的 C + + 程序,我想用一个最新版本的共享库临时替换一个系统,用于开发和测试。

我尝试设置 LD _ LIBRARY _ PATH 变量,但链接器(LD)失败,原因是:

/usr/bin/ld: can not find-lyaml-cpp

我本以为会有用的,因为根据老手册:

链接器使用以下搜索 定位所需共享的路径 对于本地链接器, 环境变量的内容 “ LD _ Library _ PATH”..。

然后我尝试设置 LIBRARY _ PATH,结果成功了。

根据海湾合作委员会手册:

的价值 LIBRARY _ PATH 是一个冒号分隔的列表 的目录,很像 PATH。当 配置为本机编译器 GCC 尝试这样指定的目录 在寻找特殊连接器时 文件,如果它不能找到他们使用 GCC _ EXEC _ PREFIX. 使用 GCC 进行链接 也使用这些目录时 搜寻普通图书馆 L 选项(但是目录) 以-L 开头)。

正如(GCC)手册所建议的那样,LIBRARY _ PATH 之所以能够工作,是因为我链接了 GCC。

但是..。

  • 因为我链接到 gcc 为什么 ld 是 被调用,作为错误消息 意味着什么?
  • 这有什么意义 有两个相同的变量 目的? 还有其他目的吗 分歧?
212200 次浏览

在编译之前,gcc 使用 LIBRARY_PATH搜索包含需要链接到程序的静态库和共享库的目录。

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

编辑: 如下所示,库可以是静态的,也可以是共享的。如果它是静态的,那么代码将被复制到您的程序中,并且在您的程序被编译和链接之后,您不需要搜索库。如果你的库是共享的,那么它需要被动态链接到你的程序,这时 LD_LIBRARY_PATH就开始发挥作用了。

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

来自 评论的警告:

既然我链接了 gcc,为什么要调用 ld,正如错误消息所暗示的那样?

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

LIBRARY _ PATH 由链接器(ld)使用

加载程序(LD.so)使用 LD _ LIBRARY _ PATH