我安装了 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
我在这里缺少哪个图书馆?
GCC 工具链只是创建工作可执行文件所需的一半*。另一半是运行时库。运行时包括 crt0.o,它包含入口点(调用 main() 的代码),通常还有一个 libc,其中包含标准 C 函数(strcmp()、memcpy() 等)以及系统调用( open()、read() 等)。你需要找到这些的来源。如果您的目标是嵌入式 Linux 或 BSD 机器,则必须找出您的目标正在使用的 libc。它可能是 GNU libc、BSD libc、newlib 或 uclibc。您可以获取这些并自行构建它们,或者它们可能已经在您的操作系统中可用。
*除非您正在构建独立的二进制文件,但这看起来并不是您正在做的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)