问题标签 [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 回答
233 浏览

android - Android llvm 链接器

我听说 Android llvm 工具链使用 mclinker。但是 llvm 默认链接器在其早期开发阶段是 lld。任何人都知道它是否会在 lld 成熟时使用 lld 或计划在未来继续使用 mclinker 并增强 mclinker。

乔纳森

0 投票
1 回答
4226 浏览

c++ - (clang / llvm-mc / lld) 你好世界 (x86-64 windows & linux)

llvm 是否能够使用 llvm-mc 和 lld 在 Windows 和/或 linux 上编译、组装和链接 x86-64 代码?

如果是这样,是否有一个 hello-world 级别的示例?目前文档非常稀少。


我尝试使用主干 LLVM(使用 clang 和 lld)构建一个简单的 hello world(main0.cpp)。

main0.cpp:

编译(无错误):

组装(无错误):

链接(在这里失败!):

链接错误:


我通过clang -o main0.run main0.cpp -###(替换ld[MY-LLVM]/lld -flavor gnu)获得了链接器命令。

我假设我在组装时生成了错误类型的目标文件,或者在链接时使用了错误的参数。

有谁知道如何正确地做到这一点?


(我的最终目标是让完整的 C++14 在 win64 上工作(没有大量黑客攻击),但我正在努力让trunk clang 与 mingw 工具一起工作,所以我想我会尝试纯 LLVM)。

0 投票
1 回答
1388 浏览

linker - LLVM 缺少链接器,无法编译 lld(llvm 链接器)

我想为一个新目标构建一个编译器,我选择了 llvm。据我了解,我可以使用clang项目作为前端,llvm作为后端。我可以从 llc(llvm 的一部分)中获取 .o 文件。现在我需要将它们全部链接到可执行文件中。我尝试使用 lld 项目,但编译失败并出现错误:

所以我有几个问题,因为我认为我遗漏了一些东西:

  1. 如果我没有新目标的 binutils,我应该如何使用 llvm 项目?- 他们创造了他们伟大的项目......但没有实际创建运行文件的最后一块?!我应该使用什么作为链接器?
  2. 有人遇到这个 lld 构建错误并解决了吗?

unname -a

  • Linux my_name-Inspiron-3521 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

gcc -v

  • 使用内置规范。COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper 目标:x86_64-linux-gnu 配置:../src/configure -v --with-pkgversion='Ubuntu 4.8 .2-19ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj -c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads =posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable -libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable- java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4。
0 投票
3 回答
7970 浏览

c++ - 使用与顺序无关的clang链接静态库

在 GCC 中,我可以使用链接器标志-Wl,--start-group-Wl,--end-group解决与具有循环依赖关系的库的链接问题。我想对 clang 做同样的事情,但似乎这个功能在 lld 版本 3.2 中被删除了。我该怎么做?

0 投票
2 回答
11044 浏览

linker - lld 链接器是 ld 和 gold 的替代品吗?

LLVM 项目 的链接器lld目前每周都在开发新功能。它的开发者承诺lldld. 与它相比如何竞争gold

lld 是替代品ld吗?有了黄金,有一些箍要跳过去

0 投票
0 回答
451 浏览

macos - 在 OS X 上增强光纤

我正在尝试在 os x 上启动并运行 boost 光纤,但我遇到了很多问题。首先,由于Apple不支持使用Apple clang,因此Fiber无法编译thread_local(根据我在网上找到的内容,他们认为他们可以比标准llvm更好地实现它,并且不想仅仅为了破坏ABI而引入它之后)。

因此,我尝试使用通过自制软件安装的 gcc-5。经过一番改进后,我设法构建了光纤,并且可以成功链接示例程序,但是它们出现了故障。

然后我想我会尝试一下当前的 llvm,因为它支持 thread_local,我可以再次获得 boost Fiber 来构建良好,但现在我遇到了问题,因为 os x 链接器似乎无法正确处理本地线程任何一个!我会发布确切的错误,但我的电源已经用完了。尽管对光纤进行了一些更改,但实际上我确实让它链接起来,但示例程序再次失败。

所以问题是,我怎样才能做到这一点?有没有办法让另一个链接器为我生成 os x 可执行文件?Llvm 带有另一个名为 lld 的链接器,但我认为它不能满足我的需求。

我想如果我绝对需要的话,我可以通过 Fiber 并提升上下文,用 boost::thread_specific_ptr 替换所有 thread_local,但我不确定那个兔子洞有多深。有什么建议么?

0 投票
1 回答
135 浏览

linker - 指定文本段的最小起始地址

如何告诉 lld 将代码放置在某个位置或上方?

我有一段遗留代码依赖于一段相当有问题的逻辑:某个函数可以接收一个值,该值要么表示函数指针数组的索引,要么实际上是函数指针。该函数通过检查值是否小于来确定值的类型0x10000;如果是这样,它是一个索引。如果不是,它是一个函数指针。

尽管我真的很想,但我无法更改这段代码。

不幸的是,测试甚至不起作用:在 OSX 上(它还没有对其他地方的任何人造成问题),程序中的函数指针的地址可能比阈值低得多,这意味着有问题的函数可以检测到它们作为索引而不是指针,一切都会出错。

有没有我可以给链接器的指令——在这种情况下是 lld——强制它把所有生成的代码放在上面或上面0x10000,这样这个问题就会消失,直到有人可以修复这个荒谬的测试?

我尝试了该-sectalign选项,但这给出了以下错误:

ld:-sectalign 的参数必须小于或等于 0x8000

0x8000还不够;代码仍然放置在它之间的空间中,0x10000并且逻辑仍然失败。

我可以使用其他选项来执行此操作吗?

0 投票
3 回答
3389 浏览

clang - LLVM编译过程和LLD

我一直在尝试切换到 LLVM,因为我想更多地进入整个“软件开发”场景,现在看来,LLVM 就是未来。我现在从源代码构建了 LLVM/Clang/LLD/compiler-rt/libcxx 几次,都使用 GNU/GCC 和 LLVM/Clang。

当我尝试使用新编译的编译器时出现问题。据我所知,clang使用的是 GNU ld 而不是 LLVM 的lld. 这是真的?

LLD 从输出来看似乎是一个非常有限的程序lld -help,但从我读到的内容来看,它与ld. 我在任何地方都找不到关于如何使用它的文档——有人知道我在哪里可以找到某种综合手册吗?

谢谢你。

0 投票
1 回答
2051 浏览

clang - 如何使用 lld 链接使用 clang -flto 编译的文件?

我正在尝试使用 llvm-lld 链接已使用 -flto 编译的对象。

我在路径调用 lld 中有 ld 并提供了所有参数。我创建了一个简单的 C++ 程序,我用 clang++ 编译它:

没有 -flto 标志,我得到一个可执行文件,使用 -flto 我得到这个错误:

这是传递给链接器的参数,我看到使用 -flto 提供的插件参数包括此插件选项,但似乎不受支持。

有没有办法让 lld 链接此代码?

0 投票
1 回答
895 浏览

c - 如何调试产生格式错误的可执行文件的实验工具链

我正在使用clang(而不是gcc)、compiler-rt(而不是libgcc)、libunwind(可在http://llvm.org/git/libunwind.git上获得)(而不是libgcc_s)、lld(而不是 GNU ld)交叉编译一个实验性的 GNU 自由 Linux 工具链,libcxx(而不是libstdc++),libcxxabi(而不是不确定,我不清楚 GNUlibstdc++及其 ABI 之间的区别)和musl(而不是glibc)。

使用musl基于gcc交叉编译器和一些补丁,我成功地编译了上述所有内容,并成功编译并链接了一个简单的 hello world C 程序。然而,似乎出了点问题,因为运行 hello world 程序会导致分段错误:

通常我会简单地用 gdb 调试它,但问题就在这里:

我似乎无法以任何方式逐步执行程序,我猜是因为错误发生在早期 C 运行时启动的某个地方。我什至无法使用layout asmand逐步完成程序集stepi,所以我真的不知道如何找出错误发生的确切位置(调试我的工具链)。

我已经确认问题在于lld使用 GNU binutilsld使用交叉编译的库和目标文件成功链接 hello world 对象(静态),从而产生一个功能性的 hello world 程序。但是,由于lld成功链接,我无法确定发生故障的位置。

注意我编译hello为静态可执行文件并使用-v gcc/clang选项来验证所有正确的库和目标文件是否已链接它。

注意在线 GDB 文档对上述错误有以下说法:

在 Unix 系统上,默认情况下,如果您的目标上有可用的 shell,gdb) 使用它来启动您的程序。run 命令的参数被传递给 shell,shell 执行变量替换、扩展通配符和执行 I/O 重定向。在某些情况下,禁用 shell 的这种使用可能很有用,例如,在调试 shell 本身或诊断启动失败时,例如:

这表明用 'exec-wrapper' 指定的外壳或包装器崩溃了,而不是你的程序。

我认为这不是真的,考虑到我正在使用的东西,并且当我使用 GNU 时问题不会发生ld,并且因为建议的解决方案 ( set startup-with-shell off) 不起作用。