我如何使用sysroot与autoconf

How do I use a sysroot with autoconf?

本文关键字:autoconf sysroot 何使用      更新时间:2023-10-16

我正在尝试为ARM设备交叉编译fontconfig。我有一个包含所有依赖项的系统根。Fontconfig使用autoconfig,所以我这样做:

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

然而,没有像--sysroot这样的标志,所以我如何将我的sysroot传递给autoconfig ?

我猜您将$CC设置为交叉编译器的路径。您可以很容易地添加一些标志:

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

请注意,这适用于所有工具,所以请记住;)

假设您的./autogen.sh调用。/configure, --host=选项确保调用正确的编译器,但不会使创建的Makefiles意识到您的sysroot。

为了实现这一点,您应该在调用./configure, ./autogen.sh: 之前添加这些环境变量
export CFLAGS="--sysroot=${SYSROOT}"
export CXXFLAGS="--sysroot=${SYSROOT}"
export LDFLAGS="--sysroot=${SYSROOT} -L${SYSROOT}/usr/lib"

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

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

此外,如果您的项目使用pkg-config,您还需要教它关于您的系统根:

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}—它们会在需要的地方被自动假定。