arm toolchain似乎没有C库

时间:2015-07-18 22:16:19

标签: c android-ndk arm toolchain

我试图用arm工具链交叉编译一个简单的程序。并且stdio库指向另一个库,这会导致以下错误:

/home/sansari/tools/arm-eabi-4.7/bin/arm-eabi-gcc hello.c -o hello
In file included from hello.c:3:0:
/home/sansari/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/include-fixed/stdio.h:50:23: fatal error: sys/cdefs.h: No such file or directory
compilation terminated.
make: *** [hello] Error 1

首先,我认为这个文件位于工具链的某个子目录中,我需要在makefile中包含该库的文件夹。但快速树输出表明它不是。因为我已经成功地将这个工具链用于一个更大的项目,我知道它是从某个地方复制的。所以我的问题是如何将它添加到这个项目中呢?什么是从中复制它的适当位置?我试图理解为什么它不在我的工具链文件夹中,以及我应该如何将它添加到我的项目中。

@Olaf - 你们非常乐于助人;然而,我有更多的学习曲线。但我确实理解你在指导什么。我知道我的构建系统中的库已经成功构建了这个平台。我甚至知道它在我的WORKING_DIRECTORY中。我不知道的是,我是否可以复制文件夹并完全解决问题,或者我是否需要继续编译并查看我得到的错误。这是递增的。例如,缺少的一个文件是cdefs.h。我能够在文件夹中找到它:

/home/sansari/ndk/android-ndk-r10d/platforms/android-19/arch-arm/usr/include/sys/cdefs_elf.h

所以我将其复制过来,构建过程继续进行到下一阶段。我想知道我是否应该复制整个/ sys或/ include目录或比较我的源的/ include目录,并确保所有文件也在目标目录中。这样我就可以避免多次编译。

但是,我继续一次复制一个文件。我得到的最后一个错误是:

/home/sansari/tbt/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/include/stdint.h:3:26: fatal error: stdint.h: No such file or directory

我查看include目录;我看到一个文件调用stdint.h 你是怎么做到的?这对你有意义吗?我对此错误感到困惑。如何在文件位于目录中时出现此错误。基本上似乎make是说这个文件不存在。

我确实发现了This帖子,这似乎说出你在说什么。我只需要知道解决它的最佳方法是什么。

@Olaf - 我真的很感谢你的帮助。通过在我的makefile中放入include语句,我能够解决所有库错误。现在链接器给出了如下错误:

/home/sansari/tbt/tools/arm-eabi-4.7/bin/arm-eabi-gcc -I../../ndk/android-ndk-r10d/platforms/android-19/arch-arm/usr/include hello.c -o hello
/home/sansari/tbt/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/../../../../arm-eabi/bin/ld: cannot find crt0.o: No such file or directory
/home/sansari/tbt/tools/arm-eabi-4.7/bin/../lib/gcc/arm-eabi/4.7/../../../../arm-eabi/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
make: *** [hello] Error 1

更新 - 我搜索了上述错误的解决方案。讨论了第一个错误here和-nostartfiles切换现在似乎对我有用。我发现this链接谈到libc.a是关于找不到-lc的错误的修复。所以我找到了一个合适的libc.a副本并将该位置传递给链接器。该程序编译,但我得到最后一个警告如下:

warning: cannot find entry symbol _start; defaulting to 00000000000080dc

使用--entery-main开关建议的this链接。所以现在我有一个可执行文件。我想再次感谢你。如果您确实发现我所做的任何问题,请为我发布一些内容。我需要一段时间才能在我的设备上获取此可执行文件。

0 个答案:

没有答案