我已经安装了两个工具链来在x86主机中编译ARM / Linux。现在,我必须使用arm-eabi-gcc编译ARM / Linux(Android)程序。这个编译器没有在Linux中使用的任何库,因此我需要执行下一个命令来编译C程序:
arm-eabi-gcc hello.c -I /家庭/亚历杭德罗/ Android的NDK-R 10c中/平台/ Android的21 /弓臂/ usr / include目录 -nostdlib -Wl,-rpath-link = / usr / arm-linux-gnueabi / lib -L / usr / arm-linux-gnueabi / lib -lc
但是当我编译它时,我得到一个链接器警告:
ld:警告:找不到条目符号_start;默认为000080b0
如何正确链接所有内容?
答案 0 :(得分:0)
_start
存在于C运行时库中。您需要将其与二进制文件链接。在Linux上,这通常位于名为crt0.a
的文件中,可能由您的编译器或LibC构建。
答案 1 :(得分:0)
只需尝试取出-nostdlib选项,因为编译器认为不允许使用存在_start函数的启动文件。
但还有另一种方式
。实现你自己的crt0.o,它应该基本上包含_start函数
void _start()
{
ctor_dtor_hook *hook;
__syslib_init();
for (hook = __CTORS__; *hook; hook++)
(*hook)();
main();
for (hook = __DTORS__; *hook; hook++)
(*hook)();
}
如果你试图实现c ++ ,请使用int main()
并将crt0.o对象链接到您正在运行的程序并放入-nostdlib