【问题标题】:Cross-compiling Valgrind for ARM为 ARM 交叉编译 Valgrind
【发布时间】:2023-03-16 09:00:01
【问题描述】:

我需要交叉编译 VALGRIND 以在运行 Linux 的 Freescale i.MX278 (ARM 9) 上运行。我有飞思卡尔自己提供的工具链。

我已经将 PATH 变量设置为工具链路径。我正在进一步使用以下命令:

$ export CROSS_COMPILE=arm-fsl-linux-gnueabi-
$ export CC=${CROSS_COMPILE}gcc
$ export CPP=${CROSS_COMPILE}cpp
$ export CXX=${CROSS_COMPILE}g++
$ export LD=${CROSS_COMPILE}ld
$ export AR=${CROSS_COMPILE}ar

$ ./configure --target=arm-fsl-linux-gnueabi \
              --host=armv7-fsl-linux-gnueabi \
              --prefix=/opt/valgrind \
              CFLAGS=-static

它通过./configure 但在make 上失败并出现以下错误:

gcc: error: unrecognized command line option ‘-marm’

【问题讨论】:

    标签: cross-compiling valgrind


    【解决方案1】:

    首先运行以下命令来更改配置文件

    sed -i -e "s#armv7#arm#g" configure
    

    然后运行配置选项。

    交叉编译成功。

    【讨论】:

    • 我遇到了同样的问题并尝试了您的解决方案,但仍然遇到同样的错误。我的配置:./configure --target=arm-none-linux-gnueabi --host=armv7-none-linux-gnueabi。还有其他方法可以解决这个问题吗?
    • 您要编译的 valgrind 版本是什么?
    • 我正在使用 valgrind 的最新版本,即 valgrind-3.13.0。
    • 你使用的工具链是 arm-none-linux-gnueabi 还是 armv7-none-linux-gnueabi ?
    • 我正在使用 arm-none-linux-gnueabi。
    【解决方案2】:

    派对有点晚了,但对于其他任何来到这里的人来说,valgrind 构建系统似乎在设置 shell 中的环境变量和将它们作为参数传递给 configure 之间有所不同。试试:

    $ export CROSS_COMPILE=arm-fsl-linux-gnueabi-
    $ ./configure --target=arm-fsl-linux-gnueabi \
                  --host=armv7-fsl-linux-gnueabi \
                  --prefix=/opt/valgrind \
                  CFLAGS=-static \
                  CC=${CROSS_COMPILE}gcc \
                  CPP=${CROSS_COMPILE}cpp \
                  CXX=${CROSS_COMPILE}g++ \
                  LD=${CROSS_COMPILE}ld \
                  AR=${CROSS_COMPILE}ar
    

    【讨论】:

    • 我正在尝试交叉编译 valgrind 3.17。我已通过裁判此线程中的 cmets 修复了错误 "for a supported CPU... no (arm)" 错误。之后我收到"checking for a supported OS... no (none)" 错误。我运行的命令是"./configure --host=arm-linux-"。我们需要在“armv6k”架构上运行 valgrind。你能指导解决错误吗?