我正在尝试使用来自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
它甚至没有抱怨任何错误。有什么问题?
答案 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支持。“