lld-link error: no input files when trying to link with libcmt.lib on Windows10
lld-link error: no input files when trying to link with libcmt.lib on Windows10
我正在编译一个非常简单的 main.c
:
int myfunc(int x, int y){
return x + y;
}
int main(){
int res = myfunc(2,2);
return;
}
我正在使用以下选项进行编译:
clang.exe -std=c11 -g -c .\main.c
我将 main.o
作为输出。现在我使用 lld-link.exe
和以下选项转到 link:
lld-link.exe -defaultlib:libcmt -libpath:"C:\Program Files (x86)\Windows Kits\Lib.0.18362.0\um\x64\" .\main.o
我收到以下错误:lld-link: error: no input files
但是最后一个参数显然是 main.o
,这应该是您放置输入文件的地方。另请记住,我必须 link 反对 libcmt.lib
才能获得 mainCRTStartup
函数的符号。
这似乎是由您的 libpath 参数中的尾部反斜杠触发的。我认为这实际上是由于 windows cmd 引用的工作方式,而不是由于任何 lld 特定问题。
由于 libpath 参数以 x64\"
结尾,结束引号被解释为转义文字引号,因此 .\main.o
被解释为 libpath 参数的一部分,并尝试 运行 命令,即使引用的字符串没有匹配的结束引号。 (在 Whosebug 上,语法高亮实际上以相同的方式解释它。)
要么将结束引号前的反斜杠更改为双反斜杠,要么从该选项中删除结尾的反斜杠。
在 https://devblogs.microsoft.com/oldnewthing/?p=12833 您可以找到对 windows shell 引用规则的更深入的解释。
修复后,我仍然必须添加 -libpath:"C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Tools\MSVC.23.28105\lib\x64" -libpath:"C:\Program Files (x86)\Windows Kits\Lib.0.18362.0\ucrt\x64"
才能实际找到 libcmt.lib
(在 MSVC 下)和 libucrt.lib
.
(此外,由于函数返回 int 中的 return;
,C 代码本身无法使用给定参数使用 clang 为我编译,但这可能只是示例中的错字。)
我正在编译一个非常简单的 main.c
:
int myfunc(int x, int y){
return x + y;
}
int main(){
int res = myfunc(2,2);
return;
}
我正在使用以下选项进行编译:
clang.exe -std=c11 -g -c .\main.c
我将 main.o
作为输出。现在我使用 lld-link.exe
和以下选项转到 link:
lld-link.exe -defaultlib:libcmt -libpath:"C:\Program Files (x86)\Windows Kits\Lib.0.18362.0\um\x64\" .\main.o
我收到以下错误:lld-link: error: no input files
但是最后一个参数显然是 main.o
,这应该是您放置输入文件的地方。另请记住,我必须 link 反对 libcmt.lib
才能获得 mainCRTStartup
函数的符号。
这似乎是由您的 libpath 参数中的尾部反斜杠触发的。我认为这实际上是由于 windows cmd 引用的工作方式,而不是由于任何 lld 特定问题。
由于 libpath 参数以 x64\"
结尾,结束引号被解释为转义文字引号,因此 .\main.o
被解释为 libpath 参数的一部分,并尝试 运行 命令,即使引用的字符串没有匹配的结束引号。 (在 Whosebug 上,语法高亮实际上以相同的方式解释它。)
要么将结束引号前的反斜杠更改为双反斜杠,要么从该选项中删除结尾的反斜杠。
在 https://devblogs.microsoft.com/oldnewthing/?p=12833 您可以找到对 windows shell 引用规则的更深入的解释。
修复后,我仍然必须添加 -libpath:"C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Tools\MSVC.23.28105\lib\x64" -libpath:"C:\Program Files (x86)\Windows Kits\Lib.0.18362.0\ucrt\x64"
才能实际找到 libcmt.lib
(在 MSVC 下)和 libucrt.lib
.
(此外,由于函数返回 int 中的 return;
,C 代码本身无法使用给定参数使用 clang 为我编译,但这可能只是示例中的错字。)