macos - 如何使用 LLVM 在 MacOS 上构建 ELF?

标签 macos clang llvm elf lld

我正在尝试使用 LLVM(来自 Homebrew)构建 ELF 文件,但我不知道如何链接它。

我的文件:
multiboot2.h:

struct multiboot2_header_t {
// Stub
} multiboot2_header __attribute__((section(".multiboot")));

内核.c:

#include "multiboot2.h"

void _start() {
// Stub
}

链接器.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. 在此之前,我从未直接使用过 LLVMlinker,只使用过 GNU GCC 构建简单的 Linux 应用程序。

最佳答案

clang --target=aarch64-unknown-linux-gnu -c file.c

Clang 会看到您的目标是 Linux 并发出一个 ELF 文件。o

% file file.o
file.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped

然后您将需要使用可以从 Homebrew 获得的 ld.lld。顺便说一句,链接描述文件对 ELF ld.lld 的支持非常好。但是,不存在对 Mach-O ld64.lld 的链接器脚本支持。

关于macos - 如何使用 LLVM 在 MacOS 上构建 ELF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60362329/

相关文章:

c - 具有嵌套函数的 OSX "Illegal instruction 4"

c++ - Clang UBSAN 报告类型 'std::_Ios_Fmtflags' 的无效值

c++ - 仅当类重写方法时,XCode 4.3/4.4 类型信息才会在动态加载的共享库中实例化的类丢失

llvm - 在 centos 7 上安装 LLVM/Clang 6+

java - OSX - 从/库/应用程序支持/TestAPI 中删除文件夹

macos - CKEditor 和 NSColorPanel : a mystery

macos - 与桌面/图标级别的应用程序交互 (OS X)

clang OpenMP 不支持 omp_set_num_threads?

ios - 检查编译时是否添加了框架 - iOS

c++ - clang++ 通过 Homebrew 软件安装 (macOS) : compilation errors