问题标签 [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.
macos - 如何使用 LLVM 在 MacOS 上构建 ELF?
我正在尝试使用LLVM(来自Homebrew)构建 ELF 文件,但我不知道如何链接它。
我的文件:
multiboot2.h:
内核.c:
链接器.ld:
我可以通过命令将其编译为目标文件kernel.oclang -c -o kernel.o kernel.c --target x86_64-none-gnu
,但我无法使用我的链接器脚本链接此目标文件。
PS在我从未直接使用LLVM和链接器之前,只有GNU GCC构建简单的 Linux 应用程序。
c++ - lld 是否有任何 C++ API?
目前我正在为我的编程语言实现一个编译器。因此,我的编译器将源文件编译为.o
目标文件,并且由于我希望我的编程语言能够访问 C 函数,例如printf
,我需要将.o
文件链接到libc
.
需要明确的是,在命令行中使用g++
或ld
作为链接器可以完美运行,但我想lld
使用 C++ 调用 LLVM 链接器()。但是,在搜索了lld
's 的文档后,我没有找到任何关于它的 C++ API 的信息。
对于任何有使用 LLVM 制作编译器的经验的人,是否有 C++ API 用于lld
?如果是,那么我该如何使用 API 或它的文档在哪里?
我不想用system()
打电话之类的东西lld
c++ - 在 macOS 上将 -fuse-ld=lld 与 Clang 一起使用
我在 macOS 10.15 上使用 Clang 10(不是 AppleClang),并试图通过-fuse-ld=lld
在 CMake flags 中指定来与 LLD 链接CMAKE_EXE_LINKER_FLAGS
。
但是,当我尝试使用 LLD 时出现以下错误:
这是我的程序:
这是我的 CMakeLists.txt 文件:
这是我启动 CMake 的 bash 脚本:
qt - 使用 clang 和 lld 生成 .map 文件
我使用 Qt、clang 和 lld。在我的情况下,有什么方法可以生成 .map 吗?
-Wl,-Map=output.map
不适合我。
提前致谢
c++ - 为什么 `clang++ -fuse-ld=lld main.cpp` 不起作用?
我安装了clang-10
and lld-10
,但我不能lld
用作链接器。
留言:
为什么不lld-10
工作?
如果我使用ld
而不是lld
:
[root@mine ~]# clang++ -fuse-ld=ld main.cpp
那么一切都好!
gcc - Remove a section from ELF during linking stage
How can I remove a section from ELF during linking stage? Is there any linker option or flag for this? I'm mostly interested on how it can be done with LLVM, but any information about GCC will be appreciated as well.
Thanks!
ld - LLD 与 LD 链接描述文件差异
我正在将一个项目从 LD 转移到 LLD。由于 LLD 中缺乏全局表达式支持,出现了一个错误。像这样支持变量吗?
在 LD 中有效的简化示例:
例子.ld
错误是symbol not found: _App_Length
。我正在寻找这只发生在 LLD 中的原因。
提供的参数如下:
linker - ld 和 lld 仅使用我输入的路径
我正在尝试为我的树莓派交叉编译,不幸的是,pi 的 libstdc++ 版本比我的构建机器旧,当我尝试运行我的可执行文件时,它显示“./<exe_name>: /usr/lib/arm-linux- gnueabihf/libstdc++.so.6:找不到版本“GLIBCXX_3.4.26”(./<exe_name> 需要)。我已经通过使用“-static”让它工作了,但我真的很想知道ld(gcc 链接器)和 lld(clang 链接器)“只在这些路径中查找任何库”它一直在寻找系统之一并链接它。我已经同步了树莓派的 /usr/lib 和 /lib 目录转到主机,我只想说“使用 /path_to_raspberry_pi_rsync/lib 和 /path_to_raspberry_pi_rsync/usr/lib”。
获得 ld 和 lld 的奖励积分告诉我它在尝试链接时使用的路径。
cmake - 在 Apple Silicon 上构建 lld
我正在尝试从 LLVM 版本 11 构建 lld(我暂时不能使用 LLVM 的任何更高版本或主版本)并且当前正在配置cmake ~/Downloads/lld-11.0.0.src/ -DCMAKE_INSTALL_PREFIX=$HOME/bin/llvm -DCMAKE_PREFIX_PATH=$HOME/bin/llvm -DCMAKE_BUILD_TYPE=Release -G Ninja
但ninja install
随后失败,出现 20 个错误,我认为这些错误都是与标准库相关的(例如如“未知类型名称'constexpr'”和“命名空间'std'中没有名为'underlying_type_t'的模板;你的意思是'underlying_type'吗?”)。
默认情况下,cmake 使用的编译器是我的系统附带的 Apple Clang 12(或自动安装)。我应该将哪些其他标志传递给 cmake 以使其正常工作?还是我需要使用不同的编译器?LLVM 11 使用相同的 cmake 标志配置和构建良好。
linux - 为什么“.shstrtab”部分是强制性的?
我正在编译一个像这样的静态可执行文件:
这是我正在使用的链接器脚本:
可执行文件按预期工作,但 strip 命令不会.shstrtab
从可执行文件中删除部分。
如果我.shstrtab
从链接描述文件中删除该部分,我会收到以下错误:
为什么需要该.shstrtab
部分?我已经替换了所有标准节名,并且可执行文件仍然按预期工作,因此程序加载代码并不关心节名。
顺便说一句,是否可以在链接描述文件中完全排除节标题,因为静态可执行文件不需要它。
注意:.shstrtab
即使它被丢弃,GNU 链接器也会默默地放入输出可执行文件。