arm g ++中缺少内容

问题描述 投票:2回答:3

我安装了CodeSourcery g ++工具链,并尝试编译一个简单的hello world程序:

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World" << endl;
    return 0;
}

并且从链接器中收到很多错误

$ arm-none-eabi-g++ helloworld.cpp -o helloworld.exe
bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000008018
lib/libc.a(lib_a-abort.o): In function `abort':
abort.c:(.text.abort+0x10): undefined reference to `_exit'
lib/libc.a(lib_a-fstatr.o): In function `_fstat_r':
fstatr.c:(.text._fstat_r+0x1c): undefined reference to `_fstat'
lib/libc.a(lib_a-openr.o): In function `_open_r':
openr.c:(.text._open_r+0x20): undefined reference to `_open'
lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0x18): undefined reference to `_sbrk'
lib/libc.a(lib_a-signalr.o): In function `_kill_r':
signalr.c:(.text._kill_r+0x1c): undefined reference to `_kill'
lib/libc.a(lib_a-signalr.o): In function `_getpid_r':
signalr.c:(.text._getpid_r+0x4): undefined reference to `_getpid'
lib/libc.a(lib_a-writer.o): In function `_write_r':
writer.c:(.text._write_r+0x20): undefined reference to `_write'
lib/libc.a(lib_a-closer.o): In function `_close_r':
closer.c:(.text._close_r+0x18): undefined reference to `_close'
lib/libc.a(lib_a-isattyr.o): In function `_isatty_r':
isattyr.c:(.text._isatty_r+0x18): undefined reference to `_isatty'
lib/libc.a(lib_a-lseekr.o): In function `_lseek_r':
lseekr.c:(.text._lseek_r+0x20): undefined reference to `_lseek'
lib/libc.a(lib_a-readr.o): In function `_read_r':
readr.c:(.text._read_r+0x20): undefined reference to `_read'
collect2: ld returned 1 exit status

我在这里缺少什么图书馆?

g++ arm linker-errors
3个回答
1
投票

GCC工具链仅是创建有效可执行文件所需要的一半*。另一半是运行时库。运行时包括crt0.o,它包含入口点(调用main()的代码),通常还包含一个包含标准C函数(strcmp(),memcpy()等)的libc以及系统调用( open(),read()等)。您需要找到这些的来源。如果要针对嵌入式Linux或BSD计算机,则必须找出目标使用的libc。可能是GNU libc,BSD libc,newlib或uclibc。您可以获取并自行构建它们,或者它们可能已经在您的操作系统中可用。

*除非您要构建一个独立的二进制文件,但这看起来并不是您正在做的事情。


0
投票

基于交叉编译器,最终目标似乎是裸机。默认的gcc库(取决于OS)在这里不起作用。您可以使用NewlibC或NewlibC-Nano。通常,它将与交叉编译器工具链一起提供。

查找已预编译NewlibC的lib文件夹。

一旦完成,

此声明可能会在一定程度上帮助您。

arm-none-eabi-gcc --specs=rdimon.specs \
         -Wl,--start-group -lgcc -lc -lc -lm -lrdimon -Wl,--end-group $(OTHER_OPTIONS)

不要忘记提供查找库的路径-L(path)。


0
投票

我有同样的问题。

事实证明,您可以将一些选项发送到linker以使其开始工作,但是在我的代码库中飞溅最少的选项是]]

-nostartfiles
© www.soinside.com 2019 - 2024. All rights reserved.