Lut*_*her 40 c++ mingw eclipse-cdt codeblocks clang
我已经按照以下一步一步的指南进行了操作,经过一些小小的尝试后,我已经设法使用代码编译clang:blocks和MinGW.太好了,所以现在我可以将Clang模块添加到eclipse(为什么有一个IDE,当你可以有四个)并开始编译.
我可以编译一个不使用标准库的简单程序,但不幸的是,当我尝试编译它时:
#include <iostream>
using namespace std;
int main()
{
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先我得到这个:
..\src\test.cpp:9:10:致命错误:找不到'iostream'文件
所以我将Mingw标题添加到include路径; 然后我明白了:
'致命错误:'找不到位/ c ++ config.h'文件'
这很奇怪.如果该文件不在'bits /'中,为什么MingW会工作?它是内置于编译器吗?没关系,我找到它的实现并在'bits /'中创建文件.
然后我得到了一大堆错误,包括奇怪的错误,似乎暗示clang没有正确实现预处理器,否则我对预处理器的理解是不正确的.
C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\include\c++/cwchar:45:26: error: expected value in expression
#if _GLIBCXX_HAVE_WCHAR_H
Run Code Online (Sandbox Code Playgroud)
还有更多这样的人.应该是这样的
#if defined(_GLIBCXX_HAVE_WCHAR_H)
Run Code Online (Sandbox Code Playgroud)
要么
#ifdef _GLIBCXX_HAVE_WCHAR_H?
Run Code Online (Sandbox Code Playgroud)
如果他们是MinGW标准库是错误的.
我假设我错误地认为可以放入clang替换gcc并且它不适用于gnu标准库.任何确认或否认这一点,以及证据支持将是最受欢迎的!
那么,有没有人有一个万无一失的方法来在Windows PC上进行clang编译?网上有关于铿锵声的信息,特别是关于窗户的信息.
我真的很想让clang和LLVM工作,因为它们从我读过的内容中听起来很棒.任何帮助,将不胜感激.
谢谢.
Mik*_*ale 20
clang
在此页面上有一些构建指令(隐藏在侧栏的"Clang Development"部分中......).对于MinGW,您需要一个名为"On Unix-like Systems"的部分.唯一棘手的部分是第5步,它告诉您如何设置C++标准库的路径.这些需要添加到代码中clang/lib/Frontend/InitHeaderSearch.cpp
.在我的机器上它看起来像这样
// FIXME: temporary hack: hard-coded paths.
AddPath("/usr/local/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/mingw32", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/backward", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include", System, true, false, false);
AddPath("c:/msysgit/mingw/bin/../lib/gcc/mingw32/4.4.0/include-fixed", System, true, false, false);
Run Code Online (Sandbox Code Playgroud)
虽然我不确定所有这些都是必需的!
根据您的版本MinGW
(以及移植的gcc的版本),标题可能会分散...
在文件中,clang/lib/Frontend/InitHeaderSearch.cpp
您将找到许多硬编码路径.问题是每个都是特定于版本的,所以如果你的MinGW版本不在那里,那么随意添加它(并通过将补丁发布到cfe-commit来要求它集成在Clang的主线中).
我个人在MinGW/msys上运行它只有很小的问题(许多测试用例失败,因为我的msys shell在有:
...... 时会破坏输入),我还没有尝试过使用CodeBlocks(我习惯了命令行).
如果您希望提供帮助,Takumi正在关注MinGW集成,Francois Pichet正在领导与VC++/MFC标头兼容的工作(即主要贡献者),而@rubenvb目前正试图在libc ++上推送补丁以使其在Windows上运行(libc ++尚未在Windows上编译).这3个区域非常独立,需要不同的技能和知识.
Clang 确实有硬编码的搜索位置,如文件中所定义clang/lib/Frontend/InitHeaderSearch.cpp
,靠近注释FIXME: temporary hack: hard-coded paths
。
这个页面上有一个关于它的说明:http : //clang.llvm.org/get_started.html
所以从你的其他编译器 (MingW) 获取包含路径,并将它们硬编码到 Clang 中,它可能会起作用。(我不确定 Clang 的 Windows 支持是否达到 100%)
我遇到了类似的问题.我使用了GCC 4.7的Mike Dinsdale的答案所指定路径的类比,并使用'-isystem'标志(由rubenvb构建的mingw64发行版中的Clang 3.2)指定它们以后我对clang可执行文件的所有调用(通过脚本).由于这些目录被明确指定为系统包含目录,因此会自动抑制由它们生成的所有可能令人厌烦的警告.
tl; dr:-isystem标志指定系统包含目录而不在Clang中重新编译
归档时间: |
|
查看次数: |
45303 次 |
最近记录: |