我用来pkg-config
帮助在 C++ 编译期间提供正确的库。据我了解,它在/etc/ld.so.conf
.我ld.so.conf
通过指向以下的 include 指令引用了以下库位置/etc/ld.so.conf.d/*.conf
:
/usr/local/lib
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
问题是我需要的库/usr/lib
默认在下面。
我可以将这条路径添加到/etc/ld.so.conf
自己的路径中还是移动库或者推荐的做法是什么?
答案1
澄清一下/etc/ld.so.conf
:此文件由动态(运行时)链接器/加载器(在 Linux 上)使用ld-linux.so
,它解析加载运行的二进制文件中的符号(这也包括共享库)。这与链接器形成对比ld
,链接器用于将多个对象/归档文件组装在一起并解决它们的依赖关系。
动态链接器/etc/ld.so.conf
在加载二进制文件时检查应在其中查找共享库的列表目录。除了那里提到的路径之外,链接器还会搜索其默认路径(在 Linux/lib
上/usr/lib
,通常更改lib64
为 64 位加载器)除非该二进制文件与一个明确禁用此功能的标志链接(-x nodefaultlib
在 binutils' 中ld
),在这种情况下,它仅尊重ld.so.conf
.
答案2
pkg-config 根本不使用 ld.so.conf,它通常将配置文件存储在/usr/lib/pkgconfig/
, (如果需要,请指定 PKG_CONFIG 变量)
IE/usr/lib/pkgconfig/libmtp.pc
# libmtp pkg-config source file
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libmtp
Description: libmtp is a library for accessing Media Transfer Protocol devices
Version: 1.1.5
Requires: libusb-1.0
Conflicts:
Libs: -L${libdir} -lmtp
Libs.private: -lgcrypt
Cflags: -I${includedir}
您可以在那里找到 cflags、libs 等,这就是 pkg-config 提供所需命令参数的方式。
因此,对于您自己的库,创建一个类似的文件(在这里阅读文档)