lld-link错误:在Windows10上尝试与libcmt.lib链接时没有输入文件

我正在编译一个非常简单的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和以下选项进行链接:

lld-link.exe -defaultlib:libcmt -libpath:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64\" .\main.o

我收到以下错误:lld-link: error: no input files

但是最后一个参数显然是main.o,据推测这是您放置输入文件的位置。另外请记住,我必须链接agaisnt libcmt.lib才能获得mainCRTStartup函数的符号。

speedisk 回答:lld-link错误:在Windows10上尝试与libcmt.lib链接时没有输入文件

这似乎是由libpath参数中的尾部反斜杠触发的。而且我认为这实际上是由于Windows cmd引用的工作方式引起的,而不是由于lld的特定问题引起的。

由于libpath参数以x64\"结尾,因此将结束引号解释为转义的文字引号,因此.\main.o被解释为libpath参数的一部分,即使在运行命令时,即使带引号的字符串没有匹配的结束引号。 (在stackoverflow上,突出显示的语法实际上以相同的方式解释它。)

或者将反斜杠更改为双引号,或者从该选项中删除尾随的反斜杠。

https://devblogs.microsoft.com/oldnewthing/?p=12833,您可以找到有关Windows Shell引用规则的更深入的说明。

修复此问题后,我仍然必须添加-libpath:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\lib\x64" -libpath:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64"才能真正找到libcmt.lib(在MSVC下)和libucrt.lib

(此外,由于函数中的return;返回了int,C代码本身也无法使用带有给定参数的clang为我编译,但这在示例中可能只是一个错字。)>

本文链接:https://www.f2er.com/3031959.html

大家都在问