交叉编译:GCC 忽略 --sysroot

问题描述 投票:0回答:2

我正在尝试使用 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

它甚至不会抱怨任何错误。有什么问题吗?

gcc arm cross-compiling
2个回答
10
投票

因为我在阅读评论之前浪费了几天时间搞乱这个问题,所以我将发布无艺术的噪音的评论作为答案:

“使用

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


0
投票

另一件事要检查 - 一些构建项目潜入编译器参数的

-nostdinc
选项。它还使构建忽略 sysroot 包含。

© www.soinside.com 2019 - 2024. All rights reserved.