【问题标题】:gcc - /usr/bin/ld error: cannot find <library> in /usr/local/lib though ldconfig list it, and path added to ld.so.confgcc - /usr/bin/ld 错误:在 /usr/local/lib 中找不到 <library> 虽然 ldconfig 列出了它,并且路径添加到 ld.so.conf
【发布时间】:2013-11-13 07:36:27
【问题描述】:

我尝试使用我手动编译并安装在 /usr/local/lib 中的库来编译 C++ 代码

软件编译在链接步骤失败:

 /usr/bin/ld: error: cannot find -lcppdb

似乎 g++ 默认不在 /usr/local/lib 中搜索,clang++ 也是如此

 g++ -print-search-dirs # does not show /usr/local/lib

但事实是/usr/local/lib 在我的/etc/ld.so.conf 中,我确实以root 身份运行ldconfig,实际上运行ldconfig -p | grep cppdb 显示了我

libcppdb_sqlite3.so.0 (libc6) => /usr/local/lib/libcppdb_sqlite3.so.0
libcppdb_sqlite3.so (libc6) => /usr/local/lib/libcppdb_sqlite3.so
libcppdb.so.0 (libc6) => /usr/local/lib/libcppdb.so.0
libcppdb.so (libc6) => /usr/local/lib/libcppdb.so

添加选项-L/usr/local/lib当然可以解决问题,但目标是使用配置文件

【问题讨论】:

  • @vidit 对它的不精确感到抱歉,但我的实际代码当然是使用 g++ 否则它不会走到链接步骤那么远,我正在编辑我的问题
  • 或许了解pkg-config

标签: c++ linux gcc ld


【解决方案1】:

ld,链接器,不为此使用外部配置文件。 ldconfig 用于加载程序,ld.so。如果您想在某处为链接器设置值,请创建一个 makefile。

【讨论】:

  • 你的意思是没有办法改变整个系统?通过环境变量的平均值或类似的东西?
  • 正确。使用生成文件。
【解决方案2】:
  1. 您可以使用链接描述文件,并将“/usr/local/lib”添加到 search_dir。 请参阅此Linker_Scripts 以获取更多详细信息。

  2. 将 /usr/local/lib 添加到 GCC_EXEC_PREFIX shell 环境,然后再试一次。 更多细节在 g++ 的 "man" 中搜索 print-search-dirs。

只是建议,还没试过。

【讨论】:

    【解决方案3】:

    在你的makefile中指定-L开关是处理这个问题的常用方法,但你实际上可以通过修改默认的GCCspec file来进行系统范围的更改,它可以用来指定要传递的附加选项到编译器、链接器等。我过去这样做是为了解决你的具体问题,但那是很久以前的事了,所以我不能给你一个具体的例子,很遗憾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2021-05-07
      • 2023-01-07
      • 2019-04-29
      • 1970-01-01
      • 2014-10-19
      相关资源
      最近更新 更多