如何在autoconf中使用sysroot?

3

我正在尝试为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个回答

4
我猜您设置了$CC为交叉编译器的路径。 您可以轻松地添加一些标志:
export CC=gcc --sysroot=/path/to/sysroot

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

1
Bash对此进行了抱怨,提示“不是有效的标识符”。导出CC=/home/user/repos/tools/linaro/gcc-linaro-4.9-2015.02-3-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc --sysroot=/home/rauger/repos/tools/linaro/gcc-linaro-4.9-2015.02-3-x86_64_arm-linux-gnueabi/。 -bash: export: `--sysroot=/home/user/repos/tools/linaro/gcc-linaro-4.9-2015.02-3-x86_64_arm-linux-gnueabi/': 不是有效的标识符。 - undefined
1
更合适的做法似乎是 CFLAGS=--sysroot=...CC应该是编译器,而CFLAGS则是传递给编译器的标志。 - undefined

2
假设您的 ./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} - 在需要时它们会被自动假定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接