如何在windows上使用clang从命令行传递链接器脚本?

如何在windows上使用clang从命令行传递链接器脚本?,windows,visual-studio,linker,clang,linker-scripts,Windows,Visual Studio,Linker,Clang,Linker Scripts,我使用的是Windows操作系统,clang版本是8.0.0。我已经安装了visual studio社区 我正在为我的一个程序尝试自定义内存映射的链接器脚本 我正在从命令行编译和执行一个程序。 这些是我在windows上尝试的选项 clang main.c -ffreestanding -nostartfiles -nodefaultlibs -Wl,-Tlinker.ld -o main 引发的错误为: 当我尝试使用-fuse ld=lld link时,错误不同 lld-link: warn

我使用的是Windows操作系统,clang版本是8.0.0。我已经安装了visual studio社区

我正在为我的一个程序尝试自定义内存映射的链接器脚本

我正在从命令行编译和执行一个程序。 这些是我在windows上尝试的选项

clang main.c -ffreestanding -nostartfiles -nodefaultlibs -Wl,-Tlinker.ld -o main
引发的错误为:

当我尝试使用
-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)
lld链接:警告:忽略未知参数:-Tlinker.ld
lld链接:错误::未定义符号:mainCRTStartup
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我想知道为什么

同样的命令可以在ubuntu上运行,但不能在windows上运行

同时也请告诉我传递链接器脚本的解决方案

windows上是否有任何用于clang的命令,这些命令应同时使用链接器脚本和clang链接器
lld link
-v Show用于运行和使用详细输出的命令

-fuse ld=lld link在Windows中使用ld linker lld link

-fuse ld=lld为Linux使用ld linker 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"
cmake-E env LDFLAGS=“-fuse ld=lld link”PATH=“”
cmake-H-G忍者-Bbuild
-DCMAKE_C_编译器:PATH=“%ProgramFiles(x86)%\LLVM\bin\clang.exe”
-DCMAKE\u CXX\u编译器:PATH=“%ProgramFiles(x86)%\LLVM\bin\clang.exe”
-DCMAKE\u C\u编译器\u ID=“铿锵”
-DCMAKE\u CXX\u编译器\u ID=“铿锵”
-DCMAKE\u SYSTEM\u NAME=“通用”

我通过比较clang的输出LL文件找到了答案,并注意到开头有一行奇怪的代码:

target triple=“x86_64-pc-windows-msvc”添加到.LL文件


一旦我将它添加到我的
testinput.ll
文件中,一切都可以通过
lld链接完美地工作。万岁

我没有VS的社区版可供尝试,因此无法给出答案。我将做一个观察-看起来好像VS社区中的CLANG使用的是Microsoft Linker,而不是
lld
(错误输出似乎是MS Linker的)。Microsoft链接器不支持链接器脚本。您正在使用VS 2019社区吗?如果添加
-fuse ld=lld link
选项会发生什么情况?是VS 2019。我将尝试使用-fuse ld=lld link我尝试使用lld link,错误为
lld link:警告:忽略未知参数:-Tlinker.ld lld link:错误::未定义符号:mainCRTStartup clang:错误:linker命令失败,退出代码为1(使用-v查看调用)
clang-cl   options files  -fuse-ld=lld-link -v
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"