windows - 如何在 Windows 上使用 clang 从命令行传递链接器脚本?
问题描述
我使用的是 Windows 操作系统,clang 版本是 8.0.0。我已经安装了视觉工作室社区。
我正在为我的一个程序尝试自定义内存映射的链接器脚本。
我正在从命令行编译和执行程序。这些是我在 Windows 上尝试过的选项
clang main.c -ffreestanding -nostartfiles -nodefaultlibs -Wl,-Tlinker.ld -o main
引发的错误是:
LINK : warning LNK4044: unrecognized option '/T'; ignored linker.ld : fatal error LNK1107: invalid or corrupt file: cannot read at 0x76 clang: error: linker command failed with exit code 1107 (use -v to see invocation)
当我尝试使用时-fuse-ld=lld-link
,错误有所不同
lld-link: warning: ignoring unknown argument: -Tlinker.ld
lld-link: error: <root>: undefined symbol: mainCRTStartup
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我想知道为什么
相同的命令在 ubuntu 上有效,但在 Windows 上无效?
还请让我知道传递链接器脚本的解决方案。
windows上是否有任何clang命令应该同时使用链接器脚本和clang链接器lld-link
?
解决方案
使用 clang-cl 的 Windows Visual Studio 帮助
clang-cl options files -fuse-ld=lld-link -v
-v 显示命令以运行和使用详细输出
-fuse-ld=lld-link 使用 ld 链接器 lld-link for Windows
-fuse-ld=lld 使用 ld 链接器 ld.lld for Linux
cmake -E env LDFLAGS="-fuse-ld=lld-link" PATH="<path\to\ninja>"
cmake -H. -G Ninja -Bbuild
-DCMAKE_C_COMPILER:PATH="%ProgramFiles(x86)%\LLVM\bin\clang.exe"
-DCMAKE_CXX_COMPILER:PATH="%ProgramFiles(x86)%\LLVM\bin\clang.exe"
-DCMAKE_C_COMPILER_ID="Clang"
-DCMAKE_CXX_COMPILER_ID="Clang"
-DCMAKE_SYSTEM_NAME="Generic"
Microsoft Visual Studio 2019 链接器选项
Windows 上的 cmake、ninja、clang-cl
我通过比较 clang 的输出 LL 文件发现了这一点,并注意到开头有一条奇怪的线:
目标三元组 =“x86_64-pc-windows-msvc”添加到 .LL 文件
一旦我将它添加到我的testinput.ll
文件中,一切都与lld-link
. 欢呼!
推荐阅读
- python - 用于循环和创建变量的 Python 脚本
- python - Pandas.read_csv 类型转换如何工作?
- java - 使用 BlueJ 的 Java
- php - 如何 preg_match KRA Pin no
- javascript - 使用 jquery 删除选定选项的问题
- angular - 如何在 Angular 2 应用程序中添加谷歌翻译?
- mxgraph - Draw.io - 捕捉变化
- android - Google Speech to Text 对话框卡住了
- spring - 使用对象作为主要条件时,如何在选择之间使用 SpringData findAll()?
- selenium - 如何在 gitlab 上为 nightwatch e2e 测试设置正确的 Selenium 主机?