问题标签 [gold-linker]

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 回答
96 浏览

c++ - gcc 9.2:虚假-Wuninitialized

我正在尝试使用 gcc 9.2.0 构建我们的代码库,但是在使用 -flto 时,我收到了十几个缺少信息的警告。gcc6.3 没有出现这些问题。

不幸的是,提到的行实际上是空的,并且警告消息缺少未初始化的标识符。

我很想用一个较小的测试用例来重现,但我不知道它涉及哪个变量。提到的两个文件没有提及任何具体内容。它实际上抱怨编译器生成的函数(__ct_base)。

有什么方法可以从 gcc 获取有关警告的更多信息?

0 投票
0 回答
495 浏览

ubuntu - 在安装 LLVM 和 gold-plugin 期间遇到致命错误:无法分配内存

做我展示clang-cfi机制的项目。因此,需要 LLVM 黄金插件。根据帖子的描述,当我在执行第 6 步时,在输入 make -j8 后(这里我也尝试使用 make -j1、-j2、-j4),它总是告诉我以下错误:无法分配记忆。我已经将 ubuntu 的基本内存设置为最大值,不能再增加了。 错误信息

https://github.com/SVF-tools/SVF/wiki/Install-LLVM-Gold-Plugin-on-Ubuntu

我的 ubuntu 的基本内存和磁盘空间分配为 pic

谁能告诉我如何解决这个问题?非常感谢你。

0 投票
1 回答
147 浏览

linux - ld 解释由黄金链接的可执行文件是否安全?

取一个简单的hello world程序,编译如下:

检查生成的二进制文件:

请注意,使用的解释器是ld. 虽然该程序恰好可以工作,但我无法找到任何有关这是否安全的信息。据我所知,gold以一种微妙不同且不兼容的方式解释 ELF 规范,需要不同的解释器。

我已尽我所能对此进行研究,但找不到任何可以回答我问题的东西。我发现最接近的是gold链接 Linux 内核(或者很困难,因为时间已经过去并且它可能已经修复)。

0 投票
1 回答
133 浏览

c++ - 链接错误:在废弃部分中定义的构造 vtable

最初的问题分布在来自不同项目的数十万个 LoC 中。它包含很多成分:内联汇编、虚拟继承、间接级别、不同的编译器和编译器选项。(这就像一部惊悚片。)我很难简化为这个 SSCCE:

使用这些命令行构建:

链接器输出是:

我相信 gcc、clang 或 gold 都存在错误。我的问题是它在哪里?(我想这是黄金,但我想在报告错误之前确定。)

FWIW:正如我所说,所有的成分都很重要,例如,如果asm删除了,问题就会消失。使问题消失的更显着的变化是:

  1. 对所有 TU 使用相同的编译器,(无论是 g++ 还是 clang++。)
  2. 与 ld 链接(即删除-fuse-ld=gold
  3. 编译main.cpp不带-O3.
  4. 编译main.cpp不带-fPIC.
  5. 在链接器命令行中交换a.o和。main.o
0 投票
0 回答
74 浏览

cmake - 如何在 CMakeLists.txt 中将链接器设置为“gold”

运行 cmake 时,您可以通过-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=gold选择黄金链接器而不是 ld。

我想CMakeLists.txt默认在文件中启用它。但我无法找到如何!?

将此添加到 CMakeLists.txt 没有帮助:

0 投票
0 回答
24 浏览

bazel-rules - Bazel/sandboxfs/ld.gold:中断链接步骤时损坏的二进制文件

我正在将一个巨大的 C++ 代码库迁移到 Bazel。

由于我们无法一次完成所有操作,因此每次编译都依赖于 30k 多个头文件。因此,无论我们使用 processwrapper 还是 linux-sandbox,创建沙箱都需要很长时间。(也许这与我们必须使用的旧 Linux 3.10 内核有关?)Sandboxfs 已被证明是一个好处。使用它可以减少大约 30% 的构建时间。这就是为什么我们要继续使用它。

但是,有时我使用 Ctrl-C 中止构建,有时 Bazel 在遇到错误时中止构建。似乎无论何时cc_binary中止构建步骤,我都会得到一个大小合适的二进制文件(就像我没有中止构建一样)但只包含 nul 字节。

仅当我使用 ld.gold (默认值)时才会发生这种情况。测试版本 2.35 和HEAD.

回顾一下:

  • 仅在使用 sandboxfs 时才会发生。
  • 仅在使用(和打断)金币时才会发生。

你对如何研究这个问题有任何想法吗?甚至:如何解决?

更新

gold打开输出文件,然后它是输出文件fallocate的最终大小(不使用临时文件)。然后它写入数据。

如果打开文件后出现错误,gold不会删除无效的输出文件对于构建工具来说有点不常见,不是吗?

0 投票
0 回答
14 浏览

cmake - 在 CMake 中使用非默认链接器(lld、mold、gold)

我必须向我的 CMake 命令添加哪些标志,才能使用非默认链接器可执行文件,如 lld、mold 或 gold?它应该独立于实际程序,纯 CMake。