Clang on Windows

匿名 (未验证) 提交于 2019-12-03 01:40:02

问题:

First of all, I've followed "Getting Started: Building and Running Clang". In particular, I've built it according to "Using Visual Studio" section. In other words, I've built it using Visual Studio 2010.

Secondly, I've manually set include and library paths to MinGW distribution:

The simple program I'm trying to compile:

#include  using namespace std;  int main() {     cout 

I get the following feedback from the compiler:

In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iostream:39: In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ostream:39: In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\ios:38: In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\iosfwd:41: In file included from C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\bits/postypes.h:41: C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:144:11: error: no member named 'fgetws' in the global namespace   using ::fgetws;         ~~^ C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:146:11: error: no member named 'fputws' in the global namespace   using ::fputws;         ~~^ C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:150:11: error: no member named 'getwc' in the global namespace   using ::getwc;         ~~^ C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:151:11: error: no member named 'getwchar' in the global namespace   using ::getwchar;         ~~^ C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:156:11: error: no member named 'putwc' in the global namespace   using ::putwc;         ~~^ C:\MinGW\lib\gcc\mingw32\4.5.2\include\c++\cwchar:157:11: error: no member named 'putwchar' in the global namespace   using ::putwchar;         ~~^ 6 errors generated. Build error occurred, build is stopped Time consumed: 646  ms.  

The obvious question is - why do I get this?

Additionally, I would like to know more details, and since, Clang website provides extremely brief information - I thought that somebody could clarify the following questions to me:

  1. As far as I understand Clang does not have its own standard library (stdc++ I guess, isn't it?). That's why I have to use MinGW's headers and libraries - am I right?
  2. What is the difference between building Clang with Visual Studio and MinGW?
  3. Do I have to hard-code include paths in clang/lib/Frontend/InitHeaderSearch.cpp or I can skip it and rather specify those paths later through "-I" option as I do in the screenshot above?

回答1:

If you build Clang with MSVS, it will automatically search the default VS include paths, and pull in those headers. This is the reason the libstdc++ headers are producing errors: they are importing C functions not present in the VS headers. Using Clang for C++ with VS is for now a no-go: you will get link failures due to missing ABI (name mangling and others) functionality in Clang. If you still want to use the MSVS Clang, don't point it to MinGW headers. It will parse the VS headers (including C++), it just will fail to link.


EDIT: I have built a dw2 version of GCC (32-bit only) accompanied by Clang. Exceptions work in this build, and so you can build real C++ stuff with Clang now on Windows. Get version 3.2 here.



回答2:

The obvious answer is you forgot sending -fno-ms-compatibility to clang++ :P

  1. You are right.
  2. VC++ is GUI tool-chain, MinGW is character console.
  3. No as clang is mature enough for public consumption but still to stabilize so let its dev team work on the code otherwise you risk work that might become lost island. I'm using -I as your example suggests.

I'm doing windows app dev using VS and use clang+CodeBlocks for sharing aspects neutral to platform's domain.



转载请标明出处:Clang on Windows
文章来源: Clang on Windows
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!