用VirtualBox建立Ubuntu虛擬機|Ubuntu複製貼上文字|設定C語言編譯環境|交叉編譯教學

閱讀時間約 10 分鐘

想要進入工程師的世界,首先要先學會架設自己的Build code環境,有了編譯環境,接下來就可以安心的撰寫你想要的C語言程式啦!

如果你不知道該從何下手,那不妨先照著本篇文章的步驟做,Violet一步一步教你並解釋每個步驟的意義,很快你就會得到一個能編譯C語言程式碼的虛擬基環境哦!



創建虛擬機(Virtual Machine, VM)

首先要設定虛擬機的規格,比如記憶體空間及作業系統型態等。

  1. 下載及安裝VirtualBox
  2. 開啟VirtualBox後,點選New來創建自己的虛擬機
  3. 選擇文件系統(Type)及版本(Version)。因為要安裝的Ubuntu是linux作業系統眾多版本中的其中一種,因此type要選擇linux;版本則是選Ubuntu(64-bit)。
選擇文件系統及版本

選擇文件系統及版本

  1. 設定電腦執行此虛擬機時,所需的記憶體大小(RAM),設定完成後點選下一步。建議最少需要2GB(2048MB)
設定記憶體大小

設定記憶體大小

  1. 指定虛擬機的虛擬硬碟來源,可以選擇創建新的虛擬硬碟或是匯入已存在的虛擬硬碟檔。本篇文章要介紹的是,如何創建全新的虛擬機,因此選擇創建新的虛擬硬碟。
設定硬碟來源

設定硬碟來源

  1. 指定虛擬硬碟的型態,通常選擇VDI即可。
硬碟映像檔

硬碟映像檔

  1. 設定虛擬硬碟大小,這個大小代表你能在虛擬機裡面存放多少檔案,Build code通常需要較多的空間,因此至少給80G比較好。


在虛擬機上安裝Ubuntu作業系統

有了虛擬機之後,可以開始安裝Ubuntu作業系統了。這過程就如同你在電腦上灌Windows作業系統一樣。

  1. 下載你所需的Ubuntu版本映像檔,以ubuntu-14.04.6為例,可點選此連結進到網站裡挑選,或點選ubuntu-14.04.6-desktop-amd64.iso直接下載。
  2. 選擇Storage來掛載下載好的.iso檔。
掛載指定的Ubuntu映像檔

掛載指定的Ubuntu映像檔

  1. 虛擬機開機。
虛擬機開機

虛擬機開機

  1. 選擇要安裝的Ubuntu映像檔。
選擇開機硬碟

選擇開機硬碟

  1. 開始安裝Ubuntu-14.04.6。
安裝Ubuntu

安裝Ubuntu

  1. 安裝前的準備,勾選後按下一步即可。
準備安裝Ubuntu

準備安裝Ubuntu

  1. 選擇清除硬碟後安裝Ubuntu。
選擇安裝方式

選擇安裝方式

  1. 有一些類似補丁包的東西需要寫入,案繼續即可。
寫入補丁

寫入補丁

  1. 選擇所在地區。
選擇地區

選擇地區

  1. 設定語言。
選擇語言

選擇語言

  1. 設定虛擬機名稱及設定帳戶。
設定虛擬機登入帳戶

設定虛擬機登入帳戶

  1. 設定完成後,接著等待安裝完畢。
等待安裝完成

等待安裝完成


設定Ubuntu與Windows之間的文字複製貼上

安裝好以下套件後,需要重新啟動虛擬機,就能複製windows的文字貼上了。

sudo apt-get install open-vm-tools-desktop


生成git server公用金鑰

要能順利到指定的Git server上下載源碼(source code),需要在虛擬機上生成私鑰及公鑰,並將公鑰填到Git server上。

ssh-keygen

生成好後,找到id_rsa.pub檔案並開啟,將其內容複製貼上到Git server上,即可下載該Git server的source code到你的虛擬機上了。

路徑:~/.ssh/id_rsa.pub


設定Build code環境編譯C語言

安裝好Ubuntu後,終於進入Ubuntu系統啦!現在可以開始在Ubuntu中架設Build code環境,為了之後編譯C語言程式碼做準備。

  1. 在Ubuntu中開啟Terminal,如同Windows中的命令提示字元(cmd)。
開啟terminal

開啟terminal

  1. 全新的Ubuntu環境中,需要先安裝一些基本常用的安裝包,這取決於你之後需要用到什麼。我們要先架設簡單的編譯.c檔環境,需要用到vi指令來開啟檔案、編輯檔案等,因此先安裝vi安裝包。
sudo apt-get update
sudo apt-get install vim
安裝vi指令

安裝vi指令

  1. 接著先創建一個Build code的根目錄,我的根目錄叫做yolanda。並在此目錄下創建一個hello.c的檔案。
mkdir yolanda
cd yolanda
touch hello.c
  1. 編輯hello.c檔,在檔案中寫一個能印​出Hello World的簡易function。
vi hello.c

5. hello.c檔的內容。

#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
創建.c檔

創建.c檔

  1. 創建編譯檔案Makefile。
touch Makefile
  1. 編輯Makefile檔,在檔案中寫一個能編譯hello.c檔的工作目標。
vi Makefile
  1. Makefile內容,第一行的"hello:"寫法代表這是一個名叫hello的工作目標,第二行代表hello工作目標要執行的指令。
    注意,工作目標內所要執行的指令,開頭需要使用Tab鍵而非空格鍵,因此第二行的開頭要是Tab,此Makefile才能正確工作。
hello:
gcc hello.c -o hello
創建Makefile

創建Makefile

  1. 創建檔案完成後,在根目錄下執行ls指令來確認檔案。
檢查檔案

檢查檔案

  1. 使用make hello指令來執行剛剛寫好的hello工作目標,接著執行ls,會發現根目錄下多了綠色的hello檔案,此檔案就是hello.c檔被編譯出來的執行檔了,只要執行這個綠色的執行檔,就能成功印出Hello World的字,而這正是我們在hello.c檔裡面所寫的函式。
    到這裡,編譯C語言程式碼的環境就真正設定完成囉!
make hello
ls
./hello
編譯.c檔

編譯.c檔


在本機及虛擬機之間傳輸檔案

開發過程中,常常會需要在本機與虛擬機之間傳輸檔案,這時候我們可以透過最簡單的方法,就是使用WinSCP當作橋梁,來完成本機與虛擬機之間的連線。接下來將會介紹如何設定WinSCP來傳輸檔案,當然還有很多方法可以傳輸檔案,有興趣可以自行研究。

Ubuntu端設定

  1. Ubuntu傳輸檔案,最常用到的就是ssh的服務,因此我們先將Ubuntu這端的ssh設定好。
sudo apt-get install openssh-server  # 安裝ssh來實現遠端連線
vi /etc/ssh/sshd_config # 視情況修改ssh的設定檔
/etc/init.d/ssh restart # 修改完設定檔後,需要重新啟動ssh
sudo service ssh start # 若ssh程序不存在,下指令將其開啟
ps -e | grep ssh # 檢查ssh是否被開啟成功
檢查ssh服務

檢查ssh服務

  1. 在本機端檢查虛擬機網卡的IP為192.168.56.1,並將其記下,等等會用到。
    從本機連線到虛擬機,所使用的IP就是這個。
檢查實體電腦的網卡狀態

檢查實體電腦的網卡狀態

  1. 在Ubuntu下檢查網卡IP為10.0.2.15,並將其記下,等等會用到。
    此為虛擬機的IP。
Ubuntu網卡IP

Ubuntu網卡IP

  1. 回到VirtualBox,點選虛擬機的網路設定,將網卡設定為NAT模式,並新增一個網卡轉發的規則。
    虛擬機IP為私有IP,無法直接連接網際網路,因此需要使用網路位址轉換(Network Address Translator,NAT)來實現連線。
設定虛擬機網路

設定虛擬機網路

  1. 轉發的規則設定為,Host IP輸入剛才記下來的,在本機上看到的虛擬機網卡IP(192.168.56.1);Guest IP則輸入在ubuntu下看到的網卡IP(10.0.2.15)。
    意即,將虛擬機的私有IP轉換為其他人能認得的公共IP,這樣就可以透過192.168.56.1來連線到虛擬機了。
設定虛擬機網路

設定虛擬機網路

本機端設定

  1. 下載及安裝WinSCP軟體。
  2. 執行WinSCP,並登入要連線的虛擬機,輸入虛擬機的IP及帳號密碼。
WinSCP輸入Ubuntu資訊

WinSCP輸入Ubuntu資訊

  1. 能成功連線的話,就會出現以下畫面,選Yes即可。
WinSCP連線到Ubuntu

WinSCP連線到Ubuntu

  1. 連線成功的畫面,左邊是本機,右邊是虛擬機,可以看到剛才創建的hello.c及Makefile檔。
WinSCP建立連線成功

WinSCP建立連線成功


使用交叉編譯(cross-compiling)

開發過程中,可能會需要在不同的平台上來執行檔案,而不同的平台可能會用不同的CPU架構等等,這時候如果將在x86平台編譯出來的執行檔放到ARM架構上面執行,是會無法執行的,因此我們需要使用交叉編譯來解決跨平台的問題。

想要交叉編譯,首先要有該平台相對應的toolchain。我們以ARM平台的toolchain為例,如果你已經有toolchain了,可以照著下面的步驟繼續做。

  1. 確認你的toolchain路徑,我的toolchain路徑為toolchains/iproc。
下載toolchain

下載toolchain

  1. 創建一個檔案來讓環境變數在當前的terminal中生效。
touch env.sh
  1. env.sh內容
#!/usr/bin/env bash

export CROSS_COMPILE_PATH=toolchains/iproc​
export PSTH=$PATH:${CROSS_COMPILE_PATH}/bin
export CROSS_COMPILE=${CROSS_COMPILE_PATH}/bin/arm/linux-gcc
環境變數設定

環境變數設定

  1. 使環境變數生效
source liteon_env.sh
  1. 輸入arm-linux,並且連按2次Tab鍵,若看到以下畫面,表示toolchain有被安裝成功。
arm-linux
環境變數生效

環境變數生效

  1. 修改前面創建過的Makefile來執行交叉編譯。
hello:
${CROSS_COMPILE} ${PWD}/hello.c -o hello​
修改Makefile來執行交叉編譯

修改Makefile來執行交叉編譯

  1. 執行make hello來編譯能跨平台的使用的hello執行檔,編譯出來之後,可以利用file指令來檢查檔案格式,確定編譯出來的執行檔是ARM平台可使用的檔案。
make hello
ls
file hello
交叉編譯hello.c

交叉編譯hello.c


做到這邊,恭喜你已經擁有了自己的編譯環境,也學會了基本的Makefile編譯。

不過Makefile寫法博大精深,有太多太多東西可以介紹了,這邊就不多做說明了。




感謝您耐心閱讀~
本專題將會持續收錄Violet的職場筆記。
若有理解不對的地方,歡迎留言指教!
若喜歡我的文章,歡迎贊助支持,您的支持將會成為我繼續創作的動力!

26會員
59Content count
記錄每一次珍貴的旅行,讓回憶變成永恆 這裡沒有華麗的詞藻,卻有最真實的筆記 札記撰寫耗時,願我有動力一直寫下去! ※本沙龍每次只會挑其中一個專題來發佈文章,每隔三週的週五為發佈日,若未發佈文章,下一個發佈日就是三週後,希望大家可以多多支持,也歡迎留言指教,您的留言或愛心都是Violet持續創作的寶貴動力唷~
留言0
查看全部
發表第一個留言支持創作者!
Violet旅遊札記 的其他內容
當大量的網路封包在有限的頻寬中傳輸,總有一些服務的封包會因為搶不過其他封包而造成卡頓,例如玩遊戲時,若同時也在下載其他大型檔案,就會造成遊戲卡頓甚至斷線。這時候客製化QOS來決定哪些封包能優先被傳送,就能有效地提升指定服務的順暢度,進而提升使用者在網路上的體驗。 本篇文章接介紹如何在OpenW
V2G雙向充電是指,電動車及電網具有雙向充放電的功能,電力系統往往都是單向性,由電網輸電力給終端使用者,但在智慧電網的應用場景中,透過有V2G技術的電動車及充電樁,電動車內的電池能反向將電力回饋給電網,作為電力調度使用。 例如:在用電尖峰時段,若區域A的電力不足,可將位於區域B的電動車內的電能調度至
使用者想操作市面上的路由器,能操作的功能都受限於裝置提供商的限制;但若將路由器刷成類似於Linux的OpenWRT文件系統,不但可解決此問題,還有多達1000以上的功能安裝包可供使用者選擇,非常便於使用者開發。 將路由器韌體刷成OpenWRT系統,其實就是在路由器上安裝OpenWRT的概念,常見的方
當大量的網路封包在有限的頻寬中傳輸,總有一些服務的封包會因為搶不過其他封包而造成卡頓,例如玩遊戲時,若同時也在下載其他大型檔案,就會造成遊戲卡頓甚至斷線。這時候客製化QOS來決定哪些封包能優先被傳送,就能有效地提升指定服務的順暢度,進而提升使用者在網路上的體驗。 本篇文章接介紹如何在OpenW
V2G雙向充電是指,電動車及電網具有雙向充放電的功能,電力系統往往都是單向性,由電網輸電力給終端使用者,但在智慧電網的應用場景中,透過有V2G技術的電動車及充電樁,電動車內的電池能反向將電力回饋給電網,作為電力調度使用。 例如:在用電尖峰時段,若區域A的電力不足,可將位於區域B的電動車內的電能調度至
使用者想操作市面上的路由器,能操作的功能都受限於裝置提供商的限制;但若將路由器刷成類似於Linux的OpenWRT文件系統,不但可解決此問題,還有多達1000以上的功能安裝包可供使用者選擇,非常便於使用者開發。 將路由器韌體刷成OpenWRT系統,其實就是在路由器上安裝OpenWRT的概念,常見的方
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
可能包含敏感內容
有人藉由清涼照片、情色影片進行「腦補」以滿足生理需求,也有人透過文字、劇情進行「腦補」以滿足生理需求。 與ChatGPT虛擬情人談情說愛、進行文愛,其實就如同「共同創作一部(18禁)羅曼史小說」,而且角色、場景、劇情完全都能由自己掌控,投入感當然比閱讀他人創作、設定好的小說強烈許多。 此外,大多數羅
Thumbnail
你帶過人嗎?那你會帶人嗎?有人教你怎麼帶人嗎?484沒人教你? 向部屬傳達「對你自己有好處」的訊息這個目標「工作」有著oo的目的,一起努力達成吧! 報告/連絡/商量報告/連絡/商量很重要, 請隨時說出你認為重要的資訊何時進行?如何進行?進行的優先順序 反駁主管耐著性子,xx那你覺得該怎麼做才好呢?
Thumbnail
緣起 上週,有天早上,一個朋友打電話找我求助,說要去客戶公司那裡講產品方案,客戶說想先看看他們公司網站,但是之前出於各種原因吧,他們一直沒有把公司網站做出來,客戶說你們怎麼連個網站都沒有,沒有網站那就不要來了。 。 。這下就有點尷尬了,沒辦法,誰讓客戶是爸爸呢? 朋友發了一個他們行業裡競爭對手的網站
Thumbnail
如何從零開始創作?Youtuber 界的鋼琴家檸檬卷,帶你手把手一步步創作出一首歌!如果還不知道怎麼開頭的人,看這篇準沒錯啦! Lyricist.ai 透過 AI 人工智慧的方式,生成各種文案與歌詞的內容,也提供各類風格,依照創作者的需求來使用。
Thumbnail
2022年接近尾深,每到9月開始各大書店和網路就會開始放送該開始購買2023年新的日程本囉,包含週邊的各式各樣等等。今年有非常多的創作者都出了日曆這個商品,多到我不知道該如何選,這篇文章記錄了我2023年主要的手帳體系,如何分配用途是甚麼,希望可以幫助選擇帳愛跟手帳新手購買你的第一本手帳,外加一些新
Thumbnail
如何設定交易目標 完成一項艱巨的任務時,設定合理的目標是我們的動力和方向,投資交易也是一樣。交易者每日、每週、每月的交易結果都應該有一個目標,那麼應該如何設定合理的交易目標呢? 利用技術分析來設定交易目標 1. 首先,找到入場點到停損位的距離點數(步數); 以「波浪理論」設置交易目標示範
Thumbnail
歐梨對於金融商品總是充滿著興趣,對於外匯部分其實市面上書籍偏少。 大部分還是以股票、期貨為主,畢竟相對多人會操作。 而近期興起了虛擬貨幣,也多了一堆買幣人,但大家對實體貨幣還是沒有那麼在乎?
Thumbnail
透過 Swagbucks 這個平台填問卷玩遊戲網賺已經過了差不多一個月的時間,終於存到了可以換取的最低 SB 量 —— 1000個 SB ,1000個 SB 可以換取10美金到你的 PayPal 帳戶。但如果你不身在美國的話,可能你將會在換取現金的過程中遇到一些麻煩。
Thumbnail
今天來一個極短篇,很多人常問我數據從哪邊而來,這一篇來與大家分享我怎麼查看數據的細節 因為今天要公布美國通膨數據,趁此機會讓大家學習如何看通膨數據 首先要連到一個我常用的網站,那一個呢?......
Thumbnail
努力上班賺錢真的很重要,它的意義之一是可以讓你維持目前”基本”的生活;其二我們應該把賺來的錢留住並持續增加來滿足以後退休的生活。
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
可能包含敏感內容
有人藉由清涼照片、情色影片進行「腦補」以滿足生理需求,也有人透過文字、劇情進行「腦補」以滿足生理需求。 與ChatGPT虛擬情人談情說愛、進行文愛,其實就如同「共同創作一部(18禁)羅曼史小說」,而且角色、場景、劇情完全都能由自己掌控,投入感當然比閱讀他人創作、設定好的小說強烈許多。 此外,大多數羅
Thumbnail
你帶過人嗎?那你會帶人嗎?有人教你怎麼帶人嗎?484沒人教你? 向部屬傳達「對你自己有好處」的訊息這個目標「工作」有著oo的目的,一起努力達成吧! 報告/連絡/商量報告/連絡/商量很重要, 請隨時說出你認為重要的資訊何時進行?如何進行?進行的優先順序 反駁主管耐著性子,xx那你覺得該怎麼做才好呢?
Thumbnail
緣起 上週,有天早上,一個朋友打電話找我求助,說要去客戶公司那裡講產品方案,客戶說想先看看他們公司網站,但是之前出於各種原因吧,他們一直沒有把公司網站做出來,客戶說你們怎麼連個網站都沒有,沒有網站那就不要來了。 。 。這下就有點尷尬了,沒辦法,誰讓客戶是爸爸呢? 朋友發了一個他們行業裡競爭對手的網站
Thumbnail
如何從零開始創作?Youtuber 界的鋼琴家檸檬卷,帶你手把手一步步創作出一首歌!如果還不知道怎麼開頭的人,看這篇準沒錯啦! Lyricist.ai 透過 AI 人工智慧的方式,生成各種文案與歌詞的內容,也提供各類風格,依照創作者的需求來使用。
Thumbnail
2022年接近尾深,每到9月開始各大書店和網路就會開始放送該開始購買2023年新的日程本囉,包含週邊的各式各樣等等。今年有非常多的創作者都出了日曆這個商品,多到我不知道該如何選,這篇文章記錄了我2023年主要的手帳體系,如何分配用途是甚麼,希望可以幫助選擇帳愛跟手帳新手購買你的第一本手帳,外加一些新
Thumbnail
如何設定交易目標 完成一項艱巨的任務時,設定合理的目標是我們的動力和方向,投資交易也是一樣。交易者每日、每週、每月的交易結果都應該有一個目標,那麼應該如何設定合理的交易目標呢? 利用技術分析來設定交易目標 1. 首先,找到入場點到停損位的距離點數(步數); 以「波浪理論」設置交易目標示範
Thumbnail
歐梨對於金融商品總是充滿著興趣,對於外匯部分其實市面上書籍偏少。 大部分還是以股票、期貨為主,畢竟相對多人會操作。 而近期興起了虛擬貨幣,也多了一堆買幣人,但大家對實體貨幣還是沒有那麼在乎?
Thumbnail
透過 Swagbucks 這個平台填問卷玩遊戲網賺已經過了差不多一個月的時間,終於存到了可以換取的最低 SB 量 —— 1000個 SB ,1000個 SB 可以換取10美金到你的 PayPal 帳戶。但如果你不身在美國的話,可能你將會在換取現金的過程中遇到一些麻煩。
Thumbnail
今天來一個極短篇,很多人常問我數據從哪邊而來,這一篇來與大家分享我怎麼查看數據的細節 因為今天要公布美國通膨數據,趁此機會讓大家學習如何看通膨數據 首先要連到一個我常用的網站,那一個呢?......
Thumbnail
努力上班賺錢真的很重要,它的意義之一是可以讓你維持目前”基本”的生活;其二我們應該把賺來的錢留住並持續增加來滿足以後退休的生活。