交叉编译:GCC忽略
我正尝试从Linux Mint的64位存储库使用arm-linux-gnueabi-gcc为诺基亚N9手机交叉编译程序(目前为libav的avconv)。 编译器的libc版本是2.15,手机有libc-2.10.1。 它们在数学库中有不兼容性,当我从libav编译并运行avconv程序时,这给了我一个段错误。
我需要编译并链接到较旧的libc版本,但我没有设法使--sysroot
选项--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 = %fn", sin(0.6451));
}
最奇怪的部分是gcc完全忽略了--sysroot
选项。 如果我将不存在的目录传递给sysroot,它仍会生成完全相同的输出二进制文件:
arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c
它甚至不抱怨任何错误。 有什么问题?
因为在阅读评论之前,我浪费了几天的时间搞这个,我将发布无聊的噪音评论作为答案:
“使用arm-linux-gnueabi-gcc -v
运行编译器并查看--with-sysroot
arm-linux-gnueabi-gcc -v
的值;这是编译器的编译目录,如果你的机器上有这个目录(可能有不同的目录编译器),那么--sroot可能无法工作[;如果你没有看到--with-sysroot
,而是看到--with-libs
,它意味着你的gcc编译时没有--sysroot
支持。“