我正在使用Windows操作系统,而Clang版本是8.0.0。我已经安装了Visual Studio社区。
我正在尝试使用链接程序脚本来为我的程序之一自定义内存映射。
我正在从命令行编译和执行程序。
这些是我在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)
我想知道为什么
same commands work on ubuntu but not on windows?
也请让我知道传递链接脚本的解决方案。
Windows上是否有用于clang的命令,这些命令应同时使用链接程序脚本和clang链接程序
lld-link
?
最佳答案
Windows Visual Studio帮助与clang-cl
clang-cl options files -fuse-ld=lld-link -v
-v显示运行和使用详细输出的命令
-fuse-ld = lld-link 对于Windows使用ld链接器lld-link
-fuse-ld = lld 对于Linux使用ld链接器ld.lld
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"
LLVM Windows Linker support
Microsoft Visual Studio 2019 Linker options
cmake, ninja, clang-cl on Windows
Clang-cl manual on Windows
LLVM extensions for LLD and clang-cl
(solved) research on ld-link with Windows
我已经通过比较clang的输出LL文件了解了这一点,并在开始时发现了一条奇怪的行:
target triple = "x86_64-pc-windows-msvc" add to .LL file
将其添加到
testinput.ll
文件后,lld-link
即可正常运行。欢呼!
关于windows - 如何在Windows上使用clang从命令行传递链接描述文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57340007/