簡體   English   中英

g++ 無法構建 Hello World

[英]g++ can't build Hello World

我的問題是我根本無法用 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 (這在 2017 年是一件奇怪的事情,因為大多數 Linux 是 64 位),您需要 32 位庫,例如lib32stdc++-7-dev包(或lib32stdc++-6-dev ;這取決於您的Debian 上的g++版本。

順便說一句,命名您的可執行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 的穩定版本是 Debian stretch 9.2; 如果您使用較舊的變體,則應考慮升級您的發行版。

你能在'/usr/inlcude/bits'目錄下找到locale.h文件嗎,編譯錯誤提示文件丟失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM