我正在尝试使用LLVM (来自Homebrew)构建ELF文件,但我无法理解如何链接它。
我的档案:
multiboot2.h:
struct multiboot2_header_t {
// Stub
} multiboot2_header __attribute__((section(".multiboot")));kernel.c
#include "multiboot2.h"
void _start() {
// Stub
}linker.ld:
ENTRY(_start)
SECTIONS
{
.text: {
/* link the multiboot struct here */
. = ALIGN(8);
KEEP(*(.multiboot))
/* place all of your code afterwards */
*(.text)
}
}我可以通过命令将其编译成对象文件clang -c -o kernel.o kernel.c --target x86_64-none-gnu kernel.o,但是我无法获得如何使用链接器脚本链接这个对象文件。
P.S.以前从未与LLVM和链接器直接合作过,只有GNU GCC开发简单的Linux应用程序。
发布于 2020-12-25 04:31:00
clang --target=aarch64-unknown-linux-gnu -c file.cClang将看到您的目标是Linux,并发出一个ELF文件。
% file file.o
file.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped然后,您会想要使用ld.lld,您可以从Homebrew中获得它。顺便说一下,链接器脚本对ELF ld.lld的支持是相当不错的。但是,对Mach-O ld64.non的链接器脚本支持不存在。
https://stackoverflow.com/questions/60362329
复制相似问题