我正在尝试为 ARM 设备交叉编译 fontconfig。我有一个包含所有依赖项等的 sysroot。 Fontconfig 使用自动配置,所以我这样做了:
./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=
选项可确保调用正确的编译器,但不会使创建的 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:${SYSROOT}/usr/lib/${HOST}/pkgconfig:${SYSROOT}/usr/share/pkgconfig"
(有很多额外的路径,因为在我的 Yocto 和 Debian 平台上,
.pc
文件遍布各处。)
执行这些措施后,您可以从
${SYSROOT}
和其他 --sysconfdir
命令行选项中省略 ./autogen.sh
- 它们会在需要时自动假定。