14

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

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

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

似乎 g++ 默认不搜索 in /usr/local/lib,同样clang++

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

然而事实是/usr/local/lib在我的/etc/ld.so.conf,我确实ldconfig以root身份运行,实际运行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当然可以解决问题,但目标是使用配置文件

4

3 回答 3

10

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

于 2013-11-02T01:40:35.493 回答
1

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

于 2013-11-04T18:22:38.043 回答
-2
  1. 您可以使用链接器脚本,并将“/usr/local/lib”添加到 search_dir。请参阅此Linker_Scripts以获取更多详细信息。

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

只是建议,还没试过。

于 2013-11-02T02:38:43.290 回答