问题标签 [lld]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
32 浏览

clang - 为什么链接器不在编译器中以编程方式使用?

我正在尝试使用 LLVM 构建一个小型编译器,以了解整个生态系统是如何工作的。我已经生成了目标文件。现在,我对链接部分有点困惑。据我了解,clang 会找到系统中存在的默认链接器(除非另有说明)并使用systemorfork_exec调用进行链接。这与用户从命令行手动运行链接器几乎相同。

但是,我也知道 llvm 工具链中有一个名为lld的项目,它是另一个链接器,但速度更快,可以链接不同类型的目标文件(COFF、ELF 等)。所以,我在想为什么 clang 不使用 lld 本身。我的意思是,为什么不在其源代码中将其用作库,在该库中,它以目标文件和其他标志作为参数调用函数,并将最终二进制文件作为返回类型(或通过引用参数)。它可以发布自己的 lld 版本,而不必依赖系统链接器(也许作为后备)。除了代码重用之外,还有什么其他原因不能以编程方式完成吗?

还有一些问题:

  • 系统中的所有链接器是否都支持交叉链接(即,我可以在 windows 中使用链接器来生成 linux 二进制文件)吗?
  • 除了硬编码通常随附的系统链接器之外,是否有命令或任何其他方式在我的程序中查找系统链接器?

当我说系统时,我指的是操作系统。

0 投票
1 回答
149 浏览

c - 如何在 Clang 中使用 WebAssembly 引用类型

我正在使用 Clang 和 LLD 用 C 语言编写 WebAssembly 应用程序。

如何编写以 anexternref作为参数的 C 函数以及如何从 JavaScript 调用此函数?如何使用externrefC 中的值调用 JavaScript 中定义的导入函数?

0 投票
0 回答
135 浏览

clang - 为什么在 clang 命令中指定目标时调用 gcc 链接器而不是 ld.lld?

你好,

在我的 WSL2 ubuntu 20.04 系统上,当我使用以下命令调用 ld.lld 时,一切正常:

但是当添加选项“--target=aarch64”时,它会调用gcc。

实际的命令将是:

注意:当我运行以下命令时,它显示:

注意:同时,我使用以下命令将 edthe ld 链接到 ld.lld:

谢谢,

西蒙

0 投票
0 回答
22 浏览

clang - 是否有我可以传递给 cmake 的环境变量使 clang 使用 lld 而不是 ld?

是否有我可以传递给 cmake 的环境变量使 clang 使用 lld 而不是 ld?

我想要一些我可以与 CC 和 CXX 一起使用的东西,并且将完成与 fuse-ld=lld 相同的事情。

0 投票
1 回答
128 浏览

rust - 使用 Rust 构建 `.wasm` 二进制文件时访问 `__heap_base`

想要遵循本文中所做的事情:https ://surma.dev/things/c-to-webassembly/但使用 Rust 并编写自定义分配器。

为此,我需要访问__heap_basellvm 添加的变量作为堆在线性内存中开始位置的指针。有没有办法在 Rust 中实现这一点?

我尝试了

但它们返回 0 而不是二进制中分配的实际值。

0 投票
1 回答
34 浏览

llvm - KEEP(*.init_array) 处的 LLD 链接故障(预期,但得到)

我正在尝试使用 clang 为 Cortex-M0 构建固件。gcc 构建当然可以正常工作。链接期间构建失败

链接器脚本是相当标准的(并且违规行也在 CMSIS 提供的脚本中)。相关部分:

我的 LLD 版本

如何修复链接?

0 投票
1 回答
47 浏览

linker - llvm linker(lld) mapfile格式说明

我想解析 lld 映射文件。有解释或文档吗?我检查了clang 文档lld 文档,但没有找到有用的信息。这是我的地图文件的示例

0 投票
1 回答
47 浏览

llvm - LLVM 链接器将堆栈放置在错误的位置

我正在尝试将 Cortex-M4 固件与 clang + lld 链接。gcc 构建工作正常。我正在使用仅调整 RAM 和 ROM 大小的库存 CMSIS链接器脚本(基数相同)。脚本的开头(没有注释):

ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")在脚本末尾的断言上链接失败。如果我删除断言二进制链接很好,但堆栈位于错误的地址。它以闪存结束(堆也在错误的位置)。输出nm

尝试在 Cortex-M 上运行时,代码当然会崩溃。我找到了这张票。如果我将我的.stack部分更改为:

然后我收到溢出错误:

这个巨大的数字是 0x200020A8 所以lld可能正确地获得了结束地址,但不是原点。

如何修复链接器脚本以将堆栈正确放置在 RAM 顶部?感谢帮助

0 投票
1 回答
671 浏览

c++ - 尝试链接 glfw 时 LLD 未定义符号

我一直在尝试在我的 Windows 10 机器上设置 LLVM 工具链。我放弃了从源代码构建并安装了 MSYS2 mingw-w64-clang-x86_64-toolchain 包(clang 版本 13.0.0)。

我可以编译使用 C++ 标准库的简单代码。我使用 clang 编译,lld 链接,我应该使用 libc++。

为了测试链接一个额外的库,我使用 glfw:

如果我注释掉 glfwInit(); 这将编译并运行良好 行并使用此命令:

所以看起来 lld 正在找到我放在 lib\ 目录中的 libglfw3.a 库文件。但是如果glfwInit(); 未注释,使用相同的命令我得到很多未解决的符号错误:

..等等。

我使用 CMake、Ninja 和 Clang 从 glfw 源代码构建了 glfw 库。

win32_window.c.obj 文件和这些错误引用的所有其他文件是 lib\ 目录中更深的几个目录,但我似乎无法让 clang/lld 找到它们。

我在这里缺少什么论点?

编辑:我跑了这个

并得到了这两行:

0 投票
0 回答
17 浏览

lld - 你好,我只是想知道著名的LLD链接器是如何在命令行中使用的?

我只是想知道著名的 LLD 链接是如何在命令行中使用的。我们知道 LLVM 是一个构建新语言的漂亮工具列,现在我尝试链接一个 obj 文件和一个 lib 文件。Lib文件中定义了一些必要的类、全局函数和iostream,但总是暴露未定义的符号,如libucrt Lib、maincrtstartup等