Ubuntu 16 遇到的 g++ 5.x ABI 不相容問題

Heresy 目前開發跨平台的 C++ 程式的時候,主要是透過 Windows 10 的「Bash on Ubuntu on Windows」這個 Windows Subsystem for Linux(WSL)來進行操作的。

在微軟剛貼出的時候,他的 Ubunutu 版本還是 14,而後來在微軟推出 Creators Update (1703) 的時候,也把 Ubuntu 的版本升級到 16.04 了~而在 Ubuntu 系統版本升級的同時,系統預設使用的編譯器也由 g++ 4.x 更新到 g++ 5.x 了。

而也因為這樣,當 Heresy 要做 Linux 環境的建置測試的時候,也碰到了一些問題,這邊就稍微紀錄一下了。

首先,會有問題的主要原因,是 GCC5.1 在發布的同時,也推出了新的 libstdc++;而這個 C++ 的標準函式庫為了符合 C++11 的標準,重新實作了 std::stringstd::list;而這兩個類別由於遵循了新的規範(禁止 Copy-On-Write),所以變得和舊版的函式庫不相容。

為了避免混亂,gcc 5.1 修改了對應的 ABI(Application binary interface),像是 std::list<int> 實際上會是定義成 std::__cxx11::list<int> 的形式;基本上,就是有部分標準函式庫的東西的 namespace 會從 std 變成 std::__cxx11 了。

閱讀全文

廣告

在 Windows 寫 Linux 程式:Visual Studio + Windows Subsystem for Linux

微軟的 VIsual Studio 在 Heresy 來看,算是 Windows 上最好的 C++ 開發環境,但是缺點就是沒有 Linux 版了。不過,微軟在這幾年正積極地往跨平台、開放原始碼的方向走,所以這部分的狀況倒也有些改變了~

在 2015 年,微軟也已經發表了跨平台的開發環境、Visual Studio Code,雖然還是沒有開放原始碼,但是也算是聊勝於無了。而同時,Visual Studio 2015 也加入了跨平台的程式開發功能!除了 Windows 外,也支援了 Android、iOS 以及 Linux~(不過當時 Heresy 想測試 Linux 的偵錯一直沒有成功就是了…)

這篇,則是 Heresy 看到微軟的 Visual C++ Team Blog 的《Targeting the Windows Subsystem for Linux from Visual Studio》後,才想起可以嘗試讓 Visual Studio 搭配 Windows 10 的 Bash on Ubuntu on Windows(Windows Subsystem for Linux、以下簡稱 WSL)來在單台 Windows PC 上、進行 Linux 上的 C++ 程式開發、偵錯

這篇的基本需求,主要是:

閱讀全文

Bash on Ubuntu on Windows 的簡單使用

前一陣子,Heresy 有寫了一篇《Windows 10 將可以跑 Linux 的 Bash shell 和 Ubuntu 的程式了》來介紹微軟即將在新版 Windows 10 內做的一個往 Linux 方向靠攏的功能了~

而雖然這項功能應該是要等到夏天的 Windows 10 年度更新才會有,不過目前在 Windows 10 Insider Preview 的 Fast Ring 最新的預覽版、Build 14316 裡面(官方介紹),就可以搶先體驗這個功能了!Heresy 看到之後,就立刻把筆記電腦切到 Insider Preview 了、準備試玩了~ XD

不過很遺憾的是,在把 Windows 10 從正式版切換到 Insider Preview 後,並沒有辦法馬上偵測到預覽版的更新…Heresy 甚至去下載了比較舊的預覽版 ISO、透過 ISO 強制更新到 Insider Preview 的版本,Windows Update 還是沒辦法偵測到更新… orz
後來是電腦又放了幾天,他才能抓到 Build 14316、並開始更新。總覺得,微軟這方面做的還真糟糕啊…

閱讀全文

Windows 10 將可以跑 Linux 的 Bash shell 和 Ubuntu 的程式了

這應該是今年微軟 Build 大會,最讓人震驚的消息了吧?有興趣的人,可以參考《Developers can run Bash Shell and user-mode Ubuntu Linux binaries on Windows 10》一文。

基本上,這項功能預計會在 Windows 10 的年度更新(Anniversary update、預計是今年夏天發布)的時候出現,他會在 Windows 10 中建立一個 Ubuntu 的 Linux 子系統;而之後就可以直接在 Windows 10 的環境下,執行 Ubuntu 的 bash shell 了!

而更重要的是,他會有一個完整的「Ubuntu user space」,Ubuntu 上的 user-mode 的應用程式,也將可以直接在這個環境下運作!甚至,不需要重新編譯過,只需要直接在這個環境中,使用 apt 這個套件管理工具,來下載各式各樣的應用~

閱讀全文