g ++无法构建Hello World

时间:2017-10-12 04:55:33

标签: c++ gcc g++ iostream

我的问题是我无法使用g ++

编译Hello World程序
    #include <iostream>

    using namespace std;

    int main(void) {

        cout << "Hello World!" << endl;
        return 0;
    }

编译器给了我留言:

evgeny@debian:~/Documents/Programming$ g++ test.cpp -o test
In file included from /usr/include/c++/4.9/clocale:42:0,
                 from /usr/include/x86_64-linux-gnu/c++/4.9/32/bits/c++locale.h:41,
                 from /usr/include/c++/4.9/bits/localefwd.h:40,
                 from /usr/include/c++/4.9/ios:41,
                 from /usr/include/c++/4.9/ostream:38,
                 from /usr/include/c++/4.9/iostream:39,
                 from test.cpp:1:
/usr/include/locale.h:29:25: fatal error: bits/locale.h: No such file or directory
 #include <bits/locale.h>
                         ^
compilation terminated.

我已经安装了libstdc ++ - developer,尝试使用-I / way-to-the-missing-lib,不同的架构密钥等,但它也不起作用。

架构信息 Linux debian 3.16.0-4-amd64#1 SMP Debian 3.16.43-2 + deb8u5(2017-09-19)x86_64 GNU / Linux

OS Debian 8.9

g ++版 g ++(Debian 4.9.2-10)4.9.2

已安装的软件包列表:

evgeny@debian:~$ dpkg --list | grep c++                                                                                                                                                          
ii  lib32stdc++-4.9-dev                   4.9.2-10                                   amd64        GNU Standard C++ Library v3 (development files)                                                
ii  lib32stdc++6                          4.9.2-10                                   amd64        GNU Standard C++ Library v3 (32 bit Version)                                                   
ii  libflac++6:amd64                      1.3.0-3                                    amd64        Free Lossless Audio Codec - C++ runtime library                                                
ii  libgpgme++2                           4:4.14.2-2+deb8u2                          amd64        c++ wrapper library for gpgme                                                                  
ii  libsigc++-2.0-0c2a:amd64              2.4.0-1                                    amd64        type-safe Signal Framework for C++ - runtime                                                   
ii  libstdc++-4.9-dev:amd64               4.9.2-10                                   amd64        GNU Standard C++ Library v3 (development files)                                                
ii  libstdc++6:amd64                      4.9.2-10                                   amd64        GNU Standard C++ Library v3                                                                    
ii  libx32stdc++-4.9-dev                  4.9.2-10                                   amd64        GNU Standard C++ Library v3 (development files)                                                
ii  libx32stdc++6                         4.9.2-10                                   amd64        GNU Standard C++ Library v3 (x32)

有什么想法吗?我希望解决方案很明显,谢谢你。

2 个答案:

答案 0 :(得分:0)

如果使用-m32(2017年是一件奇怪的事情,因为大多数Linux都是64位),你需要32位库,例如lib32stdc++-7-dev包(或lib32stdc++-6-dev这取决于您在Debian上的g++版本。)

BTW,命名您的可执行文件test的味道很差,它与标准(可能是内置的)test(1)相冲突。

我建议使用所有警告和调试信息编译您的本机架构(可能是x86-64),例如:使用

 g++ -Wall -Wextra -g test.cpp -o mytest

当然,生成的可执行文件mytest可能是64位。您可以使用file mytest命令进行检查。

顺便说一下,你的g++ 4.9已经很老了。为什么不升级它?您可以安装GCC5或GCC6,例如与aptitude install g++-6; 2017年10月,GCC的当前版本为GCC7

今天你最好至少学会C++11(不要浪费你的时间去学习更老的东西)。较旧的标准已经过时。因此,如果您希望获得该标准的良好支持,最好至少使用GCC6。

当然,您需要C ++标准库开发包。在我的Debian / Sid上,它是libstdc++-6-dev

build-essential元数据包用于构建用C语言编写的基本实用程序,而不是用C ++编写。
您需要显式安装几个与C ++相关的软件包 (而且你不知道你安装了哪个)。

如果你知道一些用C ++编写的Debian软件包(例如fish),你可以使用aptitude build-dep命令;它会正确安装构建它所需的所有包,这将包括必要的C ++内容。所以你可以尝试aptitude build-dep fish

2017年10月,Debian的stable version是Debian的第9.2段;如果您使用较旧的版本,则应考虑升级您的版本。

答案 1 :(得分:-2)

你能在&#39; / usr / inlcude / bits&#39;中找到locale.h文件吗?目录,编译错误表明文件丢失。