16

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

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

4

1 回答 1

8

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

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

于 2016-05-26T15:15:43.720 回答