我尝试编译一个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 规范文件来进行系统范围的更改,该文件可以用来指定传递给编译器,链接器等等。过去我已经做了这个来解决你的具体问题,但是很久以前,所以我不能给你一个具体的例子,不幸的是。