visual studio cl.exe链接.lib文件的路径



目前我编译和链接c++程序是这样的

cl.exe /EHsc main.cpp /link kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

看起来很别扭,我试过了

cl.exe /EHsc main.cpp /link /LIBPATH:"D:Windows Kits10Lib10.0.19041.0umx64"

它没有工作。您必须单独指定每个.lib文件。

解决方案吗?

PS:我的示例main.cpp代码

#include <Windows.h>
#include <iostream>
int main()
{
SetCursorPos(1000, 1000);
std::cout << "Hello World!n";
return 0;
}

库名必须在链接器中显式指定。

如果选中链接器选项->在Visual Studio中,你会发现有Marco $(CoreLibraryDependencies);%(AdditionalDependencies)。

你可以在Visual Studio(the tool can be found in Win->Visual Studio folder)的Developer Powershell中做类似的事情。

$CoreLibraryDependencies=@("kernel32.lib","user32.lib","gdi32.lib","winspool.lib","comdlg32.lib","advapi32.lib","shell32.lib","ole32.lib","oleaut32.lib","uuid.lib","odbc32.lib","odbccp32.lib")

cl.exe /EHsc main.cpp /link $CoreLibraryDependencies /LIBPATH:"D:Windows Kits10Lib10.0.19041.0umx64"

当然,也可以将文件夹中的所有库存储到数组中通过powershell脚本。

我找到了一种方法来找到丢失的lib位置。

如果你用cl.exe或clang.exe编译你的代码,如果你有丢失的库,它会显示错误,说"error LNK2019: unresolved external symbol __imp_CLSIDFromString"

然后使用grep搜索"__imp_CLSIDFromString"符号在所有lib文件夹中。

例如:

grep -o --color -a "__imp_CLSIDFromString" /mnt/c/Program Files (x86)/Windows Kits/10/Lib/10.0.22000.0/um/x64/*

最新更新