Calendar

十二月 2017
« 十一月    
 123
45678910
11121314151617
18192021222324
25262728293031

Categories

在 FreeBSD 9.1 裡完全使用 clang 代替系統的 gcc

已經算是有相當多年沒有把系統的版本做提升了,趁著 FreeBSD 9.1-RELEASE 開始內建 LLVM 3.1 的機會,我也順便做了一次多年來罕見的升級。
畢竟 FreeBSD base system 上使用的 GCC 實在是太舊了,是變成 GPLv3 之前的最後一個版本,也就是 4.2.1 這個早就該作古的版本。
加上我對 GCC 的內部的設計實在是有點反胃,認識我的人應該也知道我蠻討厭那個大鬍子教主,所以聽到能換成 LLVM 當然就是馬上安排時間衝了。

Continue reading 在 FreeBSD 9.1 裡完全使用 clang 代替系統的 gcc »

在 x86 環境下編譯 GCC 4.8 會出現 '_ITM_TYPE_M256' does not name a type 的錯誤

我想應該不少人已經知道 x86 平台被很多 software developer 無視已久了。
特別是歷經了用 gcc -O3 編譯 zlib 以後會讓包括 ssh 在內的一大堆程式爆炸,叫修又被裝死很長一段時間的這段血淚史,讓我對這個潮流更加印象深刻:
Bug 270120 - (PR40838) [4.4/bad-code] -ftree-vectorize causes segfaults on x86 due to stack misalignment
Bug 41156 - [4.4/4.5/4.6 Regression] zlib segfault in inflate_table() compiled w/ -O -msse2 ftree-vectorize
不過最近在租用外國 KVM 服務的時候,居然遇到一家實體 CPU 採用 Xeon E3-1270 V2 的主機商,無論如何就是無法讓 64-bit 的 FreeBSD ISO 能 boot 起來,無論是 8.3 和 9.1 都不行。
相對地,其它 Linux 家族的 64-bit 安裝光碟都完全沒事,可以正常 boot 也能裝得很開心,這實在是讓我這個喊了 FreeBSD 才是王道超過 10 年的人看得很傻眼。
雖然主機商馬上 call 了 FreeBSD 的 maintainer 來看看有沒有辦法解決,但最後只是推測這新的 CPU 架構和 USB 裝置的初始化有衝突,要修正還是不知道得等到何年何月,所以我就和主機商說讓我改裝 i386 的 FreeBSD 9.1 了。
因此在切換到 x86-64 環境的數年後,我又再次被迫回到 x86 平台這個戰場來編譯程式,向者艱辛的道路邁進。

Continue reading 在 x86 環境下編譯 GCC 4.8 會出現 '_ITM_TYPE_M256' does not name a type 的錯誤 »

FreeBSD 的 boost-1.45.0 沒辦法用 gcc 4.7 編譯的問題

因為最近還是很忙,所以就常話短說。

拿 GCC 4.7 當編譯 ports 用的 compiler 去 build boost-1.45.0 的時候,會遇上這個錯誤:

./boost/config/requires_threads.hpp:29:4: error: #error "Threading support unavaliable: it has been explicitly disabled with BOOST_DISABLE_THREADS"

遇到的話,請直接殺進 devel/boost-libs/work/boost_1_45_0/boost/config/stdlib 改libstdcpp3.hpp。
改法在 boost 官方的 tickets 裡已經有人提供了:https://svn.boost.org/trac/boost/attachment/ticket/6165/libstdcpp3.hpp.patch

簡單說就是補個 defined(_GLIBCXX_HAS_GTHREADS) 的判斷而已。
我自己是會先在 devel/boost-libs 裡 make clean 再 make configure 一遍才進去改,然後才 make install。
至於能不能遇到錯誤才去改,改完繼續 make install,我就不確定了。

題外話...
真正的大學英文,或說托福考試用的英文,對高職背景的人來說真的是頗吃力。
即便以前竹北高中那邊刻意排了比別家高工還要多的英文課,其實跟普通科的英文程度還是差異懸殊。
至於英聽能力,高中/高職時代學校會話課指定的那本「大家說英語」根本是烏龜爬,每個字都聽得到也不用太高興。
這半年多來的感想就以上三行。

GCC 4.5 的 C++0x mode 還沒到堪用的程度

本文已作廢,心臟夠大顆的可以開了。

所以不要衝太快,
編大一點的程式遇到 list::sort(functor) 就炸了,
亂寫的範例:

Continue reading GCC 4.5 的 C++0x mode 還沒到堪用的程度 »