【问题标题】:How do I use a sysroot with autoconf?如何使用带有 autoconf 的 sysroot?
【发布时间】:2017-02-17 13:55:47
【问题描述】:

我正在尝试为 ARM 设备交叉编译 fontconfig。我有一个包含所有依赖项等的 sysroot。Fontconfig 使用自动配置,所以我这样做了:

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

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

【问题讨论】:

    标签: c++ configuration compilation autoconf


    【解决方案1】:

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

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

    请注意,这适用于所有工具,因此请牢记;)

    【讨论】:

    • 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:导出:`--sysroot =/home/user/repos/tools/linaro/gcc-linaro-4.9-2015.02-3-x86_64_arm-linux-gnueabi/':不是有效标识符
    • 似乎更适合做CFLAGS=--sysroot=...CC 应该是编译器,CFLAGS 是传递给编译器的标志。
    【解决方案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} - 它们会在需要时自动假定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多