/etc/ld.so.conf 不包含 /usr/lib

/etc/ld.so.conf 不包含 /usr/lib

我用来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 提供所需命令参数的方式。

因此,对于您自己的库,创建一个类似的文件(在这里阅读文档

相关内容