Calendar

十一月 2017
« 十一月    
 12345
6789101112
13141516171819
20212223242526
27282930  

Categories

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,我就不確定了。

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

用 Boost.Spirit 搭 std::string 使用時容易遇到的問題

這個問題太多人問了,
所以還是先寫下來當成 FAQ 用;
官方文件的 quick start 這一章是類似下面這樣教:

加上 The Scanner and Parsing 那一小節也提到 pharse-level parsing 有兩種版本:

導致有人寫出這種 code 來結果編不過在那邊哭:

Continue reading 用 Boost.Spirit 搭 std::string 使用時容易遇到的問題 »

Boost.Serialization

在設計 editor、game 或是實現軟體系統中的 heuristic algorithm 等情況下,常需要設計 save/load 或 undo 之類的還原功能。學過 design pattern 的人大都知道 memento 和 command 這兩個 pattern。通常比較簡單的東西靠 command pattern 就能順便做出 undo 功能了,但是在其它比較複雜的狀況下就需要靠 memento pattern 來幫忙,將物件的狀態儲存起來以便隨時復原。有些語言如 Java 提供了將物件本身序列化 (serialize) 的機制,所謂序列化就是把物件狀態變成一串資料儲存起來。這樣就可以做到和 memento 相同的功能,更進一步的話還能將序列化後的資料存在 disk 上或透過網路傳遞。C++ 語言本身沒有支援 serialization 的功能,所以 boost 以 library support 的形式做了一個類似的。內建的支援有 binary、text 和 xml 三種輸出格式。這篇只會出現 text,反正用法都沒差 (唯一要注意的就是 binary 並非 portable)。

Continue reading Boost.Serialization »

Boost.MultiIndex

很久沒發程式文了。
最近常到處在網路上亂逛,
發現 boost 在台灣真的是沒什麼人在用。
應該說 C++ 普及的程度實在太低了,
看來還是放一點東西比較好...
不過用 1280x1024 解析度 + IE7 來讀這篇大概 code 右半邊會無法顯示,
懶得玩複製貼上的話就乖乖切到 1920x1200 或用 firefox 吧 (字會小一點但是很難看);
不然就等我有空去改改 css。

Continue reading Boost.MultiIndex »