是否可以使用 clang++ 编译 Win32 应用程序?

问题描述 投票:0回答:1

我已经在 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

我做错了什么?

c++ winapi clang
1个回答
0
投票

为了让这个简单的 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)

这个答案真的要归功于所有在评论中提供有用反馈的人。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.