我正在尝试为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?
答案 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
- 它们会在需要时自动假定。