【问题标题】:g++ can't build Hello Worldg++ 无法构建 Hello World
【发布时间】:2017-10-12 04:55:33
【问题描述】:

我的问题是我根本无法用 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

操作系统 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)

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

【问题讨论】:

  • 为什么今天需要-m32
  • 哦,为什么大家都关注无关紧要的事情,我已经删除了它,因为在这种情况下无关紧要。如果你有兴趣,我比较汇编器列表,没有别的
  • 你安装了什么版本的 Debian,什么架构,什么包?
  • 那么请编辑您的问题并说出重要的事情,包括您已安装的 C++ 相关软件包。 build-essential 用于 C 程序,而不是 C++ 程序
  • 我已添加信息

标签: c++ gcc g++ iostream


【解决方案1】:

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

顺便说一句,将您的可执行文件命名为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 stretch 9.2;如果您使用较旧的变体,则应考虑升级您的发行版。

【讨论】:

  • 如果我不使用此密钥或使用 -m64 我会遇到同样的问题。关于测试,谢谢,没想到
  • 所有优点,但没有一个真正尝试回答问题。
  • OP 没有充分了解他的系统以获得帮助。顺便说一句,这个问题更像是一个系统管理员问题,所以应该去unix.stackexchange.com 了解更多详细信息(所有与 C++ 相关的软件包已安装)
  • 我试过 aptitude build-dep fish 但什么也没找到,对于 g++-6 也是一样的。 p.s.所有 pkg​​ 列表添加到主帖。我有 Debian 8.9,但我相信它应该可以在不升级的情况下工作
【解决方案2】:

你能找到'/usr/inlcude/bits'目录下的locale.h文件吗,编译错误提示文件丢失。

【讨论】:

  • 但是/usr/include/bits/是一个internal头目录;它很可能被一些lib32stdc++-6-dev 包填充
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多