问题标签 [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 投票
1 回答
1007 浏览

c - 无法运行使用 clang/lld/mingw 编译的 Windows 二进制文件

我已经从http://releases.llvm.org/download.html 和 mingw 从https://sourceforge.net/projects/mingw-w64/在 Windows 10 上下载并安装了 clang

我正在尝试使用 clang/lld/mingw 编译一个非常基本的 C 程序:

要编译我调用:

这会创建一个在 mainCRTStartup 启动时出错的 exe(准确地说是 __security_init_cookie)。

但是,使用 binutils 中的默认 ld 运行是成功的:

请注意,我希望使用 mingw 标头,而不是 msvc。

我总共尝试过:

  • x86_64-8.1.0-posix-seh-rt_v6-rev0
  • x86_64-7.3.0-posix-seh-rt_v5-rev0
  • x86_64-8.1.0-win32-seh-rt_v6-rev0
  • x86_64-8.1.0-win32-sjlj-rt_v6-rev0

没有任何运气产生一个功能程序。

所以我想知道,我在这里做错了什么明显的事情吗?

编辑:我也尝试过使用 msys2 无济于事。具体来说:

0 投票
1 回答
544 浏览

llvm - 检查 LLVM LTO 和 ThinLTO 优化?

通常,在编译器优化之后,我们会得到文本的 LLVM IR,以便我们可以比较优化前后的 IR 并进行推理。在 LTO 中,我们通常将 IR 位码文件输入到链接器 (lld) 并获取本机目标文件。在 LTO 通过后,有没有办法获得单个整体 LLVM IR(文本表示)?除了查看目标文件的文本部分之外,是否有任何有效的方法来分析目标代码以找出优化。

谢谢

请告诉我,如果您需要更多信息!

0 投票
1 回答
1504 浏览

json - Zabbix发现规则-如何填写key item

我是 Zabbix 的新手,我遇到了问题。我在 power shell 中运行一个脚本并获取此示例数据:

这里只是一个示例,大约有 40 多对端口名称和端口状态。我已经在 Zabbix 服务器中创建了一个发现规则,我希望它可以自动创建名称为 {#BZSENDPORTNAME} 且值为 {#BZSENDPORTSTATUS} 的项目。例如:项目 Com_Onshore_SDE ;value = 3。我在这里创建了一个发现。然后我得到这样的结果:

在此处输入图像描述

项目的名称是我所期望的,但键包含端口状态的值我希望端口状态是项目的值,而不是键。它还显示错误“项目不允许参数”。Zabbix 代理配置文件为:UserParameter=custom.discovery,powershell.exe -NoProfile -ExecutionPolicy Bypass -file "C:\Zabbix\Scripts\Get-BZSendMultiPortsInfo-test.ps1"

请帮我解决一下这个。非常感谢

0 投票
1 回答
533 浏览

rust - 如何在 Rust 的特定内存区域中声明静态变量?

我有一个静态常量,我想放置在我的 MCU 的特定内存区域中,并且该程序是用 Rust 为 ARM stm32m4 MCU 编写的。

在我的测试用例中,我将变量定义为:

在我的memory.x文件中,我指定了:

这建立了,但是当我检查我的输出文件时,我想找到"This is in the correct place no?"位于的文本0x8003c00,但是当我用这个搜索时:

它把它作为输出:

8003c00编译时如何获取要存储的字符串?或者这件事有什么价值?

基本上,最后,我想在该特定位置存储一个更大的结构,因为这是我的引导加载程序,我想稍后从我的应用程序代码中读取该结构的值。

0 投票
2 回答
1285 浏览

gcc - 将自定义链接器可执行文件指定为 g++

我想lld在我们的项目中尝试 LLVM 链接器 ()。我们使用 gcc 6,因此显然该-fuse-ld=lld标志尚不可用。我不控制默认使用的 ld 可执行文件,所以我不能用符号链接替换它。还有其他选择吗?

我们使用的构建系统是make,链接是由编译器完成的,而不是直接调用ld。

0 投票
0 回答
1555 浏览

clang - 将 llvm 链接器 (lld) 与 mingw 一起使用

我想拥有没有 Microsoft SDK 的完整 Win32 开发工具链。mingw64 工作,但它的链接器很慢。作为替代方案,我正在尝试将 clang 用于 windows。我可以让 clang 7.0.1(但不是 8.0.0)与 mingw 头文件/库一起工作,但只能使用 mingw 的 ld.exe。如果我强制使用 ldd.exe (-fuse-ld=lld),一切都可以编译和链接,但应用程序在启动时会立即崩溃。有什么我可以在这里做的吗,比如在命令行中改变一些东西?

这是链接步骤的命令行和 --verbose 的样子:

0 投票
1 回答
2188 浏览

clang - 无法使用 lld-link.exe (Windows) 链接 C 运行时库 (libcmt.lib)

我正在使用 LLVM 编写一种语言。我想避免打包 clang 并简单地使用 LLVM 工具(例如 lld、lld-link)。我一直在尝试printf从我的简单 IR 代码 ( testinput.ll) 中调用该函数:

但无论我尝试什么,我都会不断收到错误:

注意:我通过简单地在libcmt.lib系统上搜索随机选择了链接“... spectre\x64\libcmt.lib ...”。

错误:

我正在使用带有 LLVM 5.0 的 Windows 10 (x64)。有趣的是,使用link.exe(Windows 的 VS 工具的链接器)一切正常(在我的例子中,这就是 clang 在后台使用的)。

我读过这篇文章

...正如我之前写的,__enclave_config 是一个由链接器填充的变量,但是您必须使用 VC 链接器,以及一个足够新的链接器,以便能够自动填充它。...

我相信这里的问题是libcmt.liblld-link链接器。lld-link版本(LLVM 5.0)是否与libcmt.lib我正在使用的版本不兼容,这是问题所在吗?

编辑:我已经设法追踪clang在幕后做了什么,并使用以下命令找到了它:

显然它正在使用 lld-link,并且它正在工作。-fuse-ld=lld -v然而,奇怪的是,只有使用 clang(也许使用选项?)将输入目标文件编译为 .LL (LLVM IR) 时,它才能正确编译。

奇怪的是,在检查来自 clang ( test.ll) 的输出 .LL 文件时,存在 printf (以及它使用的一些其他 *printf 函数)的完整源代码(在 IR 中)定义(在输出 .LL 中)文件)。

因此,它以某种方式printf在输出 .LL、IR 代码文件中获取了自身的定义。

据我所知,你不能只是$ llc libcmt.lib testinput.ll?那将是链接器的工作......(llc 只接受一个位置参数)

一旦我对我的文件(不是从 clang 输出)尝试相同的 lld-link 命令和参数, testinput.ll得到的错误如下:

0 投票
1 回答
121 浏览

linker - 是否可以在 Clang 的 ld.lld 的链接器脚本中使用“NOCROSSREFS_TO”?

我需要使用自定义链接器脚本编译项目。

本项目由 gcc 编译成功。

当我将 clang 与 ld.lld 链接器一起使用时,构建失败。

由于使用链接器脚本中使用的“NOCROSSREFS_TO”命令,它在链接器阶段失败。

是否可以对 ld.lld 链接器使用这样的命令?有什么选择吗?

0 投票
1 回答
38 浏览

linker - 链接器中的“端口”是什么?

我正在阅读LLD(LLVM 链接器)的文档,其中提到了“端口”。

例如。,

ELF端口是本文档中将描述的端口。PE/COFF端口已完成,包括 Windows 调试信息 (PDB) 支持。WebAssembly端口仍在进行中(请参阅 WebAssembly lld 端口)

有人可以解释一下链接器端口到底是什么吗?

0 投票
2 回答
2436 浏览

c - LLD 和链接描述文件

我正在尝试为一个简单的 c 程序发送链接器脚本。我在 Ubuntu 和 Windows 上都试过了。

在 Ubuntu 上

经过一番研究,我发现它正在GNU-ld使用,所以使用 clang 命令行选项-fuse-ld=lld,所以现在我使用 clang 默认链接器链接lld

我试过这个命令

clang main.c -ffreestanding -nostartfiles -nodefaultlibs -fuse-ld=lld -Wl,-Map,output.map,-T Example_Linker.ld -o main

一切正常。我得到了内存映射文件,并且还能够传递链接器脚本。

在 Windows 上

Clang 最初寻找 Microsoft Visual Studio Linkerlink.exe来生成可执行文件。

它不支持链接器脚本。

所以随着-fuse-ld=lld

我尝试了以下命令
clang main.c -ffreestanding -nostartfiles -nodefaultlibs -fuse-ld=lld -Wl,-Map,output.map,-T Example_Linker.ld -o main

所以现在抛出的错误是

我应该如何编写命令,以便能够获取内存映射文件并同时传递链接器脚本?

请帮助我解决问题。