交叉编译:GCC忽略--sysroot

tro*_*olo 12 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
Run Code Online (Sandbox Code Playgroud)

两个命令都创建相同的输出文件.这是hello.c看起来像:

#include <stdio.h>
#include <math.h>

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

最奇怪的是gcc完全忽略了这个--sysroot选项.如果我将一个不存在的目录传递给sysroot,它仍会生成完全相同的输出二进制文件:

arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c
Run Code Online (Sandbox Code Playgroud)

它甚至没有抱怨任何错误.有什么问题?

jco*_*ctx 7

由于我在阅读评论之前浪费了几天时间来处理这个问题,因此我将发布无艺术噪音的评论作为答案:

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