如何在 ubuntu 20.04 上安装 x86_64-elf-ld?

How do I install x86_64-elf-ld on ubuntu 20.04?

我正在尝试编写一个 OS 内核,我需要一定的依赖性才能将程序集编译为 iso 二进制文件。依赖关系是 x86_64-elf-ld。我在 ubuntu 网上找不到任何安装它的资源,所以我想我会问互联网。

如果确实需要,您可以使用以下命令从最新的 binutils 源代码构建 x86_64-elf-ld

wget https://ftp.gnu.org/gnu/binutils/binutils-2.36.1.tar.xz
tar Jxf binutils-2.36.1.tar.xz
mkdir binutils
pushd binutils
 ../binutils-2.36.1/configure --prefix=/usr/local --target=x86_64-elf --program-prefix=x86_64-elf- 
make all
sudo make install
popd

ls -ail /usr/local/bin/x86_64-elf-*
13136197 -rwxr-xr-x 1 root root  5946864 Feb 27 23:53 /usr/local/bin/x86_64-elf-addr2line
13136193 -rwxr-xr-x 2 root root  6194776 Feb 27 23:53 /usr/local/bin/x86_64-elf-ar
13136205 -rwxr-xr-x 2 root root  9218448 Feb 27 23:53 /usr/local/bin/x86_64-elf-as
13136202 -rwxr-xr-x 1 root root  5890200 Feb 27 23:53 /usr/local/bin/x86_64-elf-c++filt
13136199 -rwxr-xr-x 1 root root   262680 Feb 27 23:53 /usr/local/bin/x86_64-elf-elfedit
13136206 -rwxr-xr-x 1 root root  6624808 Feb 27 23:53 /usr/local/bin/x86_64-elf-gprof
13136209 -rwxr-xr-x 4 root root 10380024 Feb 27 23:53 /usr/local/bin/x86_64-elf-ld
13136209 -rwxr-xr-x 4 root root 10380024 Feb 27 23:53 /usr/local/bin/x86_64-elf-ld.bfd
13136200 -rwxr-xr-x 2 root root  5996448 Feb 27 23:53 /usr/local/bin/x86_64-elf-nm
13136196 -rwxr-xr-x 2 root root  6900392 Feb 27 23:53 /usr/local/bin/x86_64-elf-objcopy
13136192 -rwxr-xr-x 2 root root 10369928 Feb 27 23:53 /usr/local/bin/x86_64-elf-objdump
13136195 -rwxr-xr-x 2 root root  6194800 Feb 27 23:53 /usr/local/bin/x86_64-elf-ranlib
13136198 -rwxr-xr-x 2 root root  4391904 Feb 27 23:53 /usr/local/bin/x86_64-elf-readelf
13136191 -rwxr-xr-x 1 root root  5936152 Feb 27 23:53 /usr/local/bin/x86_64-elf-size
13136194 -rwxr-xr-x 1 root root  5932576 Feb 27 23:53 /usr/local/bin/x86_64-elf-strings
13136201 -rwxr-xr-x 2 root root  6900384 Feb 27 23:53 /usr/local/bin/x86_64-elf-strip

请注意,您可能必须先在 Ubuntu 或 Debian 上安装以下一个或多个软件包:build-essential、flex、bison、libisl-dev、texinfo texlive。

您已经在 x86-64 ELF 平台上 (Ubuntu GNU/Linux);系统 ld 是 x86-64 ELF。

alias x86_64-elf-ld=ld 如果您想 copy/paste 构建使用该命令的指令。

无论如何,您可能都需要自己的链接描述文件,因此它默认制作 Linux ELF 可执行文件这一事实可能没问题。

https://wiki.osdev.org/GCC_Cross-Compiler 建议设置 cross-GCC 如果你想编译 C 源,但你也可以使用系统 gcc 和正确的选项(比如 -ffreestanding -mgeneral-registers-only 以避免发明对 libc 函数的调用,并且如果您不希望您的内核在某些地方使用 XMM 寄存器,您可能只有 saved/restored 个整数寄存器。)

GNU/Linux 或 *BSD 是很好的开发平台;他们已经在使用 ELF,这通常是 osdev 教程/指南的首选。因此,这些 OSes 上的本机工具链可用于自定义 OS 开发,AFAIK。与 Windows 上的 MinGW 或 Cygwin 不同,您需要做更多的工作才能弄清楚如何获得具有所需内容的平面二进制文件,或者尤其是制作多重引导映像。