交叉编译:GCC忽略--sysroot

时间:2013-07-11 20:47:25

标签: 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

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

1 个答案:

答案 0 :(得分:4)

因为在阅读评论之前我浪费了几天时间,所以我会发布artless noise的评论作为答案:

“使用private void addProvider(String provider) { //Check permissions locationManager.requestLocationUpdates( provider, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, locationListener); } 运行编译器并查看arm-linux-gnueabi-gcc -v的值;这是编译器构建的目录。如果您的计算机上有此目录(可能使用不同的编译器) ),然后--sysroot可能不起作用[;如果你看到--with-sysroot而是看--with-sysroot,那么]意味着你的gcc编译没有{{1支持。“