如何将 sysroot 与 autoconf 一起使用?

How do I use a sysroot with autoconf?

我正在尝试为 ARM 设备交叉编译 fontconfig。我有一个包含所有依赖项等的 sysroot。Fontconfig 使用自动配置,所以我这样做了:

./autogen.sh --host="arm-arm1176jzs-linux-gnueabi"         \
              --sysconfdir="${SYSROOT}etc"    \
              --prefix="${PREFIX}"        \
              --localstatedir="${SYSROOT}var" \
              --disable-docs 

但是,没有像 --sysroot 这样的标志,所以我如何将我的 sysroot 传递给自动配置?

我猜你将 $CC 设置为交叉编译器的路径。您可以轻松添加一些标志:

export CC=gcc --sysroot=/path/to/sysroot

请注意,这适用于所有工具,因此请牢记 ;)

假设您的 ./autogen.sh 调用 ./configure,--host= 选项确保调用正确的编译器,但不会让创建的 Makefile 知道您的 sysroot。

为了实现这一点,您应该在调用 ./configure./autogen.sh:

之前添加这些环境变量
export CFLAGS="--sysroot=${SYSROOT}"
export CXXFLAGS="--sysroot=${SYSROOT}"
export LDFLAGS="--sysroot=${SYSROOT} -L${SYSROOT}/usr/lib"

(我的实验在某些情况下需要额外的 -L。)

注意:我定义了我的路径变量,例如 $SYSROOT 没有尾部斜杠。

此外,如果您的项目使用 pkg-config,您还需要向其传授您的 sysroot:

export PKG_CONFIG_SYSROOT_DIR="${SYSROOT}"
export PKG_CONFIG_LIBDIR="${SYSROOT}/usr/lib/pkgconfig:${ROOTFS}/usr/lib/${HOST}/pkgconfig:${ROOTFS}/usr/share/pkgconfig"

(还有很多附加路径,因为在我的 Yocto 和 Debian 平台上,.pc 文件到处都是。)

采取这些措施后,您从 --sysconfdir 和其他 ./autogen.sh 命令行选项中省略了 ${SYSROOT} - 它们会在需要时自动假定。