繁体   English   中英

gcc - / usr / bin / ld错误:找不到 <library> 在/ usr / local / lib中虽然ldconfig列出它,并且路径已添加到ld.so.conf中

[英]gcc - /usr/bin/ld error: cannot find <library> in /usr/local/lib though ldconfig list it, and path added to ld.so.conf

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

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

 /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 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当然可以解决问题,但目标是使用配置文件

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

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

  1. 您可以使用链接描述文件,并将'/ usr / local / lib'添加到search_dir。 请参阅此Linker_Scripts以获取更多详细信息。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM