gcc - 交叉编译 : GCC ignores --sysroot

标签 gcc arm cross-compiling

我正在尝试使用 Linux Mint 64 位存储库中的 arm-linux-gnueabi-gcc 为诺基亚 N9 手机交叉编译程序(目前来自 libav 的 avconv)。编译器的libc版本是2.15,手机是libc-2.10.1。它们在数学库中不兼容,当我从 libav 编译和运行 avconv 程序时,这给了我一个段错误。

我需要针对旧的 libc 版本进行编译和链接,但我没有设法获得 --sysroot工作的选择。

我做了一个小测试程序,以避免重复配置和编译libav。

arm-linux-gnueabi-gcc --sysroot=/opt/CrossCompilation/NokiaN9/ -o output.sysroot hello.c
arm-linux-gnueabi-gcc -o output.nosysroot hello.c

这两个命令都创建了一个相同的输出文件。这是什么hello.c好像:
#include <stdio.h>
#include <math.h>

int main() {
    printf("Hello, World! Sin = %f\n", sin(0.6451));
}

最奇怪的是 gcc 完全忽略了 --sysroot选项。如果我将一个不存在的目录传递给 sysroot,它仍然会产生完全相同的输出二进制文件:
arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c

它甚至不会提示任何错误。有什么问题?

最佳答案

因为我在阅读评论之前浪费了几天时间来处理这个问题,所以我要发布 artless noise的评论作为答案:

“使用 arm-linux-gnueabi-gcc -v 运行编译器并查看 --with-sysroot 的值;这是编译器构建的目录。如果您的机器上有这个目录(可能使用不同的编译器),那么 --sysroot可能不起作用[;如果你没有看到 --with-sysroot 而是看到 --with-libs ,它] 意味着你的 gcc 是在没有 --sysroot 支持的情况下编译的。”

关于gcc - 交叉编译 : GCC ignores --sysroot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603213/

相关文章:

linux - Try...catch 导致带有 posix 线程的嵌入式 ARM 出现段错误

linux - 如何将 Linux 内核交叉编译为 MIPS 小端主机?

java - 在 Eclipse 中同时构建和上传

linux-kernel - 用于 ARM 的 Linux 中的矢量页面映射

c++ - gcc 内联 asm x86 CPU 标志作为输入依赖项

c - 编译C程序后Eclipse CDT意外输出

python - 交叉编译python for arm时导入zlib错误

linux - 为 ARMv7 与 ARMv5 编译驱动程序

在 C 中编译多个源

gcc - 运行cpp文件而不编译