所以以前我尝试用c ++编译一个lambda表达式,我的默认编译器是gcc-4.4,你知道它不支持lambda表达式,所以我试着安装一个更新版本的gcc-4.7,安装成功,但在那之后,我无法编译我的任何程序。
我试图恢复以前版本的gcc,但更新替代品并不适合我。
-errors:
In file included from /usr/local/include/htmlcxx/html/ParserDom.h:5:0,
from urlServer.cpp:7:
/usr/local/include/htmlcxx/html/tree.h:118:21: error: ‘ptrdiff_t’ does not name a type
urlServer.cpp: In lambda function:
urlServer.cpp:148:29: error: ‘urlHash’ is not captured
urlServer.cpp:148:38: error: return-statement with a value, in function returning 'void' [-fpermissive]
In file included from /usr/local/lib/gcc/i686-pc-linux- gnu/4.7.1/../../../../include/c++/4.7.1/algorithm:63:0,
from urlServer.cpp:5:
/usr/local/lib/gcc/i686-pc-linux- gnu/4.7.1/../../../../include/c++/4.7.1/bits/stl_algo.h: In instantiation of ‘_InputIterator std::__find_if(_InputIterator, _InputIterator, _Predicate, std::input_iterator_tag) [with _InputIterator = std::istream_iterator<std::basic_string<char> >; _Predicate = writeAllLinks(std::list<std::basic_string<char> >)::<lambda(const string&)>]’:
/usr/local/lib/gcc/i686-pc-linux- gnu/4.7.1/../../../../include/c++/4.7.1/bits/stl_algo.h:4490:41: required from ‘_IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = std::istream_iterator<std::basic_string<char> >; _Predicate = writeAllLinks(std::list<std::basic_string<char> >)::<lambda(const string&)>]’
urlServer.cpp:148:39: required from here
usr/local/lib/gcc/i686-pc-linux- gnu/4.7.1/../../../../include/c++/4.7.1/bits/stl_algo.h:146:7: error: void value not ignored as it ought to be
我正在使用debian
问题:如何恢复以前版本的gcc?
我知道这个问题已经被问到但是我找不到答案,我尽我所能,谢谢;
答案 0 :(得分:1)
1)只需使用Linux发行版的软件包管理器再次安装软件包即可。您的工具中还应该有类似修复包或其他类似选项的内容。别忘了你需要一个有效的binutils / gcc / libc / g ++ / libg ++组合。也许您的发行版包含一个用于开发的元数据包,其中包含所有需要的包。
2)您可以并行安装多个版本的编译器。 您只需要为配置选项提供--prefix =。我用 /opt/linux-gnu-gcc4.x.x用于版本。使用/ opt路径是不常与您的发行版包冲突的常见做法。
3)问题是,根本无法编译任何程序,这不是一个很好的问题描述。对我来说,听起来你有一组混合的库头到不兼容的头问题。没有更详细的错误描述,没有人能够理解你做了什么。但你应该从1)
开始