如何在autoconf中使用sysroot?

时间:2016-10-08 19:12:05

标签: c++ configuration compilation autoconf

我正在尝试为ARM设备交叉编译fontconfig。我有一个带有所有依赖项的sysroot等.Fontconfig使用autoconfig所以我这样做了:

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

但是,没有像--sysroot这样的标志,那么如何将我的sysroot传递给autoconfig?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:-1)

假设您的 ./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 文件到处都是。)

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