Skip to Content

在 ubuntu 編譯 c++ 程式

最近要試著把 c++ 寫的程式放上 ubuntu,終於要來學習這方面的知識了。
 
首先用 VMWare Player 安裝一套 ubuntu LTS 14.04.4,安裝好之後,就寫了一小段 c++ 的 Hello World 程式。
 
main.cpp
 
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}
 
不過,預設的環境似乎無法處理 c++ 程式,我在終端機的命令如下:
 
heaven@ubuntu:~/Documents/Monster$ gcc main.cpp -o main
 
出現下面的訊息
 
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
 
於是先換成 c 來試看看。
 
main.c
 
#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}
 
編譯命令如下
 
heaven@ubuntu:~/Documents/Monster$ gcc main.c -o main
 
沒有任何反應,應該是成功了。執行 main
 
heaven@ubuntu:~/Documents/Monster$ ./main
Hello World!
 
看到 'Hello World!',就表示順利成功。
 
*** *** ***
 
再來試 c++,在 Windows 的環境上,我是安裝 Code::Blocks,ubuntu 雖然也有這一套,但我暫時沒有考慮安裝,我想試試直接在終端機下處理,免得日後程式移到 ubuntu,每次都要用 Code::Blocks 再處理一次。
 
聽說 c++ 的編譯器是 g++,於是執行 g++
 
heaven@ubuntu:~/Documents/Monster$ g++ main.cpp -o main
 
出現如下訊息:
 
程式 'g++' 目前尚未安裝。 您可以由輸入以下內容安裝:
sudo apt-get install g++
 
於是依樣進行安裝,過程如下:
 
heaven@ubuntu:~/Documents/Monster$ sudo apt-get install g++
[sudo] password for heaven: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会安装下列额外的软件包:
  g++-4.8 libstdc++-4.8-dev
建议安装的软件包:
  g++-multilib g++-4.8-multilib gcc-4.8-doc libstdc++6-4.8-dbg
  libstdc++-4.8-doc
下列【新】软件包将被安装:
  g++ g++-4.8 libstdc++-4.8-dev
升级了 0 个软件包,新安装了 3 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 19.2 MB 的软件包。
解压缩后会消耗掉 40.0 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main libstdc++-4.8-dev amd64 4.8.4-2ubuntu1~14.04.1 [1,051 kB]
获取:2 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main g++-4.8 amd64 4.8.4-2ubuntu1~14.04.1 [18.1 MB]
获取:3 http://us.archive.ubuntu.com/ubuntu/ trusty/main g++ amd64 4:4.8.2-1ubuntu6 [1,490 B]
下载 19.2 MB,耗时 1分 23秒 (231 kB/s)                                         
Selecting previously unselected package libstdc++-4.8-dev:amd64.
(正在读取数据库 ... 系统当前共安装有 199477 个文件和目录。)
Preparing to unpack .../libstdc++-4.8-dev_4.8.4-2ubuntu1~14.04.1_amd64.deb ...
Unpacking libstdc++-4.8-dev:amd64 (4.8.4-2ubuntu1~14.04.1) ...
Selecting previously unselected package g++-4.8.
Preparing to unpack .../g++-4.8_4.8.4-2ubuntu1~14.04.1_amd64.deb ...
Unpacking g++-4.8 (4.8.4-2ubuntu1~14.04.1) ...
Selecting previously unselected package g++.
Preparing to unpack .../g++_4%3a4.8.2-1ubuntu6_amd64.deb ...
Unpacking g++ (4:4.8.2-1ubuntu6) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
正在设置 libstdc++-4.8-dev:amd64 (4.8.4-2ubuntu1~14.04.1) ...
正在设置 g++-4.8 (4.8.4-2ubuntu1~14.04.1) ...
正在设置 g++ (4:4.8.2-1ubuntu6) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in 自动模式
 
不知為何會有簡體中文?因為安裝時,語系的處理過程不順,我曾經安裝簡體中文後來又移除,不知是不是簡體中文的殘留?或是這版繁體中文預設就是如此?
 
先不管簡體中文了,再次使用 g++,命令如下:
 
heaven@ubuntu:~/Documents/Monster$ g++ main.cpp -o main
 
沒有反應,應該成功了。執行看看
 
heaven@ubuntu:~/Documents/Monster$ ./main
Hello world!
 
果然成功了。
 
不過 g++ 是 4.8 的版本,這一版在正規式的處理會有問題,先前我在 Windows 底下跑 Code::Blocks v13.12,就有正規式的問題。據說要 g++ 4.9 之後的版本才 OK。不知為何目前只更新到 4.8 的版本?
 
剛寫了一小段正規式的程式,果然就出現問題了。
 
main.cpp
 
#include <iostream>
#include <regex>
using namespace std;
int main()
{
    string s = "This is 100";
    regex e ("\\d+");
    if (regex_search (s,e))
        cout << "regex OK." << endl;
    else
        cout << "regex NO OK" << endl;
}
 
編譯和執行如下:
 
heaven@ubuntu:~/Documents/Monster$ g++ -std=c++11 main.cpp -o main
heaven@ubuntu:~/Documents/Monster$ ./main
terminate called after throwing an instance of 'std::regex_error'
  what():  regex_error
Aborted (core dumped)
 
不過先試到這裡就好。因為之前我寫的程式,已經把正規式改成其他方法處理了,Code::Blocks v13.12 可以順利執行,所以先不管 g++ 4.9 了。
 
下一步是要看看如何在 ubuntu 上順利編譯我寫的程式,也許要練習寫個 makefile 了。
 
後記:
 
寫完這篇,就試了這個命令
 
heaven@ubuntu:~/Documents/Monster$ g++ -std=c++11 *.cpp *.h -o Monster
 
結果意外順利,直接就編譯成功了。^____^

回應

發表新回應

這個欄位的內容會保密,不會公開顯示。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。
  • 可使用的 HTML 標籤:<a> <address> <b> <blockquote> <br> <caption> <center> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <h1> <h2> <h3> <h4> <h5> <h6> <hr> <i> <img> <ins> <li> <ol> <p> <pre> <span> <strike> <strong> <sub> <sup> <table> <tbody> <td> <th> <tr> <u> <ul>
    Allowed Style properties: background, background-attachment, background-color, background-image, background-position, background-repeat, border, border-bottom, border-bottom-color, border-bottom-style, border-bottom-width, border-collapse, border-color, border-left, border-left-color, border-left-style, border-left-width, border-right, border-right-color, border-right-style, border-right-width, border-spacing, border-style, border-top, border-top-color, border-top-style, border-top-width, border-width, bottom, caption-side, clip, color, direction, empty-cells, font, font-family, font-size, font-size-adjust, font-stretch, font-style, font-variant, font-weight, height, left, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, margin, margin-bottom, margin-left, margin-right, margin-top, max-height, max-width, min-height, min-width, overflow, padding, padding-bottom, padding-left, padding-right, padding-top, right, table-layout, text-align, text-decoration, text-indent, text-transform, top, unicode-bidi, vertical-align, white-space, width, word-spacing, z-index

更多關於格式選項的資訊

CAPTCHA
驗證碼只有阿拉伯數字, 這是躲廣告用的, 麻煩你輸入了.
Image CAPTCHA
Enter the characters shown in the image.


story | about seo