我已经在 Visual Studio 中完成了这个简单的 Microsoft 教程的第一步: https://learn.microsoft.com/en-us/windows/win32/learnwin32/your-first-windows-program
但是假设 Visual Studio 的许可条款与我的最终目标不兼容,所以我试图让同样的事情与
clang
一起工作。
所以,我天真地安装了 LLVM 和 Windows SDK。然后我尝试以下操作:
PS ~> & 'C:\Program Files\LLVM\bin\clang++.exe' `
-o bin\win32-program.exe `
-I 'C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\cppwinrt\' `
-I 'C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared\' `
-I 'C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt\' `
-I 'C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\' `
-I 'C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\winrt\' `
-L 'C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\x64\' `
-L "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt_enclave\x64\" `
-L 'C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64\' `
.\src\win32-program.cpp
但是链接器找不到任何外部符号。
error LNK2019: unresolved external symbol __imp_RegisterClassW referenced in function wWinMain
error LNK2019: unresolved external symbol __imp_CreateWindowExW referenced in function wWinMain
我做错了什么?
为了让这个简单的 Win32 演示正常工作,我需要向
clang++
提供的论据如下:
> "C:\Program Files\LLVM\bin\clang++.exe" `
-o .\bin\win32-program.exe `
-I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\" `
-L "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\" `
-l "kernel32" `
-l "user32" `
-D "_UNICODE" `
-D "UNICODE" `
.\src\win32-program.cpp
clang++
的命令行帮助既密集又简洁,所以这是我需要在其中找到的内容:
-I <dir> Add directory to the end of the list of include search paths
(定位 Windows 头文件。)-L <dir> Add directory to library search path
(找到包含我需要的实现的 Windows 库。)-l
参数需要与特定库链接。您不得在参数中包含 .dll
文件后缀。 -l
未记录在 LLVM 命令行帮助或网页中(在撰写本文时)。但是,如果我以前使用过 gcc,这个参数对我来说似乎会非常熟悉。 (https://www.rapidtables.com/code/linux/gcc/gcc-l.html)-D <macro>=<value> Define <macro> to <value> (or 1 if <value> omitted)
这个答案真的要归功于所有在评论中提供有用反馈的人。谢谢!