问题标签 [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.
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 无济于事。具体来说:
llvm - 检查 LLVM LTO 和 ThinLTO 优化?
通常,在编译器优化之后,我们会得到文本的 LLVM IR,以便我们可以比较优化前后的 IR 并进行推理。在 LTO 中,我们通常将 IR 位码文件输入到链接器 (lld) 并获取本机目标文件。在 LTO 通过后,有没有办法获得单个整体 LLVM IR(文本表示)?除了查看目标文件的文本部分之外,是否有任何有效的方法来分析目标代码以找出优化。
谢谢
请告诉我,如果您需要更多信息!
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"
请帮我解决一下这个。非常感谢
rust - 如何在 Rust 的特定内存区域中声明静态变量?
我有一个静态常量,我想放置在我的 MCU 的特定内存区域中,并且该程序是用 Rust 为 ARM stm32m4 MCU 编写的。
在我的测试用例中,我将变量定义为:
在我的memory.x
文件中,我指定了:
这建立了,但是当我检查我的输出文件时,我想找到"This is in the correct place no?"
位于的文本0x8003c00
,但是当我用这个搜索时:
它把它作为输出:
8003c00
编译时如何获取要存储的字符串?或者这件事有什么价值?
基本上,最后,我想在该特定位置存储一个更大的结构,因为这是我的引导加载程序,我想稍后从我的应用程序代码中读取该结构的值。
gcc - 将自定义链接器可执行文件指定为 g++
我想lld
在我们的项目中尝试 LLVM 链接器 ()。我们使用 gcc 6,因此显然该-fuse-ld=lld
标志尚不可用。我不控制默认使用的 ld 可执行文件,所以我不能用符号链接替换它。还有其他选择吗?
我们使用的构建系统是make,链接是由编译器完成的,而不是直接调用ld。
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 的样子:
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.lib
和lld-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
得到的错误如下:
linker - 是否可以在 Clang 的 ld.lld 的链接器脚本中使用“NOCROSSREFS_TO”?
我需要使用自定义链接器脚本编译项目。
本项目由 gcc 编译成功。
当我将 clang 与 ld.lld 链接器一起使用时,构建失败。
由于使用链接器脚本中使用的“NOCROSSREFS_TO”命令,它在链接器阶段失败。
是否可以对 ld.lld 链接器使用这样的命令?有什么选择吗?
linker - 链接器中的“端口”是什么?
我正在阅读LLD(LLVM 链接器)的文档,其中提到了“端口”。
例如。,
ELF端口是本文档中将描述的端口。PE/COFF端口已完成,包括 Windows 调试信息 (PDB) 支持。WebAssembly端口仍在进行中(请参阅 WebAssembly lld 端口)
有人可以解释一下链接器端口到底是什么吗?
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
所以现在抛出的错误是
我应该如何编写命令,以便能够获取内存映射文件并同时传递链接器脚本?
请帮助我解决问题。