我在主文件夹下构建了一个 C 库(从源代码编译而成),现在我必须构建一个依赖于该库的新包。运行 configure 脚本时,我收到错误
configure: error: The required <package> library was not found.
是否有一个环境变量可以编辑以使我的脚本搜索库的路径?
我已经尝试过了LD_LIBRARY_PATH
答案1
许多库都使用 pkg-config,因此告诉它在哪里找到本地安装的
.pc
文件:导出PKG_CONFIG_PATH =“$本地/lib/pkgconfig:$本地/共享/pkgconfig”
(系统范围的目录将被自动包含。)
有时使用特定于库的命令而不是通用命令pkg 配置; 例如,krb5-配置。在本例中,指向您的
bin
目录:导出路径=“$本地/bin:$PATH”
如果不使用 pkg-config,您将必须手动将编译器和链接器指向正确的位置。
导出 CFLAGS="-I$本地/包括” # 对于 C 编译器 导出CXXFLAGS="-I$本地/包括” # 对于 C++ 编译器 导出LDFLAGS="-L$本地/lib” # 对于链接器
./configure --help
通常会列出一系列选项,允许分别指定每个库的位置。--with-feature=...
通常,
./configure --help
还会列出每个库的环境变量(例如CURL_CFLAGS
和CURL_LIBS
);在帮助文本中查找“C 编译器标志”或“链接器标志”。如果您经常需要多个自定义库,这很快就会变得不方便;您应该一次为所有库指定 pkg-config 路径和 cflags。
你可能编译时还需要将加载程序指向库位置。对于 Linux,它将是:
export LD_LIBRARY_PATH="$LOCAL/lib"
这不应该是必要的,当跑步编译的程序;链接器将向编译的二进制文件本身添加正确的路径(如果您想检查,请查找“Library rpath”)。
readelf -d yourprogram
对于 Mac OS X,设置
DYLD_LIBRARY_PATH
应该具有类似的效果;otool
可用于检查应用程序。
在上述所有示例中,$LOCAL
将是您在安装库时使用的前缀;例如,如果您这样做了./configure --prefix ~/usr
,那么在这里使用 ~/usr。
答案2
如果你还没有安装该库,你需要将它的包含路径传递给你的配置脚本,类似于这个问题。
LD_LIBRARY_PATH
编译后就会使用,因此您可以在运行时找到该库。