【问题标题】:LD_LIBRARY_PATH is ignored by GCCLD_LIBRARY_PATH 被 GCC 忽略
【发布时间】:2018-04-16 18:42:46
【问题描述】:

根据文档,GCC 在 LD_LIBRARY_PATH 中查找路径以链接共享库,但在我的情况下,它似乎被忽略了!

echo $LD_LIBRARY_PATH -->:/home/mehrdad/usr/lib(所以LD_LIBRARY_PATH是当前设置的)

我在“/home/mehrdad/usr/lib”中有libfoo.so,但是: gcc main.c -lfoo 返回错误:

/usr/bin/ld: cannot find -lfoo
collect2: error: ld returned 1 exit status

那有什么问题??? LD_LIBRARY_PATH 已弃用???!

但我可以通过显式命令成功链接:

gcc main.c -L/home/mehrdad/usr/lib -lfoo

我也可以通过以下方式成功执行 a.out:

./a.out

似乎 LD_LIBRARY_PATH 受到 OS 库加载器的尊重,但不是 GCC!

我的环境: 操作系统:CentOs 7 编译器:gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)

【问题讨论】:

  • 粗略地说,LD_LIBRARY_PATH 用于您的可执行文件(实际上是动态链接器)在运行时(即启动程序时)查找库时。在编译时,应使用-L 选项设置库路径。
  • "根据文档,GCC 在 LD_LIBRARY_PATH 中查找路径以链接共享库" 你可以链接到这些文档吗? (也许您将 LIBRARY_PATHLD_LIBRARY_PATH 混淆了?也许您的文档是。)
  • 谢谢你们!老实说,我只听说过 LD_LIBRARY_PATH !
  • 所以'LIBRARY_PATH'不适用于编译时链接阶段??!仅用于运行时链接?
  • 哦! LD_LIBRARY_PATH -->LD = 装载机!!!我得到了它!谢谢!

标签: c linux gcc


【解决方案1】:

我错了!感谢Alexandre CDavid Schwartz

LD_LIBRARY_PATH 仅适用于加载程序(运行时)。

LIBRARY_PATH 是我根据文档所需要的:

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

【讨论】:

    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多