gcc – / usr / bin / ld错误:无法在/ usr / local / lib中find<library>,但ldconfig列出它,path添加到ld.so.conf

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

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

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

g ++似乎不会在/usr/local/lib默认search,对于clang++

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

然而事实是/usr/local/lib在我的/etc/ld.so.conf而且我以root身份运行了ldconfig ,并且实际运行了ldconfig -p | grep cppdb 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选项当然解决了这个问题,但是目标是使用configuration文件

链接器ld不使用外部配置文件。 ldconfig用于加载程序ld.so 创建一个makefile,如果你想设置链接器的值。

1,您可以使用链接器脚本,并将'/ usr / local / lib'添加到search_dir。 看到这个Linker_Scripts来获得更多的细节。

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

只是建议,它还没有尝试过。

在makefile中指定-L开关是解决这个问题的常用方法,但实际上可以通过修改默认的GCC 规范文件来进行系统范围的更改,该文件可以用来指定传递给编译器,链接器等等。过去我已经做了这个来解决你的具体问题,但是很久以前,所以我不能给你一个具体的例子,不幸的是。