Are there any C++ APIs for lld?



目前我正在为我的编程语言实现一个编译器。因此,我的编译器将源文件编译为.o对象文件,因为我希望我的编程语言能够访问像printf这样的C函数,所以我需要将.o文件链接到libc

需要明确的是,在命令行中使用g++ld作为链接器非常有效,但我想使用C++调用LLVM链接器(lld(。然而,在搜索了lld的文档之后,我没有找到任何关于它的C++API的信息。

对于任何有使用LLVM制作编译器经验的人来说,lld是否有C++API?如果是,那么我如何使用API,或者它的文档在哪里?

我不想用system()之类的东西来调用lld

为了做到这一点,您必须使用llvm c++api

首先,创建您的主文件:

#include <lld/Common/Driver.h>
int main() {
std::vector<const char *> args;
// Equivalent to calling lld from the command line
args.push_back("ld64.lld");
args.push_back("-dynamic");
args.push_back("-arch");
args.push_back("x86_64");
args.push_back("-platform_version");
args.push_back("macos");
args.push_back("11.0.0");
args.push_back("11.0.0");
args.push_back("-syslibroot");
args.push_back("/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk");
args.push_back("-lSystem");
args.push_back("/usr/local/Cellar/llvm/15.0.5/lib/clang/15.0.5/lib/darwin/libclang_rt.osx.a");
args.push_back("test.o");
// Replace macho with elf, mingw, wasm, or coff depending on your target system
lld::macho::link(args, llvm::outs(), llvm::errs(), false, false);
return 0;
}

接下来,使用进行编译

clang++ <insert c++ file name> `llvm-config --cxxflags --ldflags --system-libs --libs core` -llldMACHO -llldCOFF -llldELF -llldCommon -llldMinGW -llldWasm -lxar

如果您想查看系统上lld需要什么命令和标志,可以通过在c文件上运行clang并添加-v来查看单独的命令。

最新更新