Calendar

五月 2012
« 三月    
 123456
78910111213
14151617181920
21222324252627
28293031  

Categories

Page 1 of 1412345678910...Last »

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

--- libstdcpp3.hpp.orig 2010-10-01 17:19:44.000000000 +0800
+++ libstdcpp3.hpp      2012-03-21 05:20:04.000000000 +0800
@@ -31,7 +31,8 @@
 
 #ifdef __GLIBCXX__ // gcc 3.4 and greater:
 #  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
-        || defined(_GLIBCXX__PTHREADS)
+        || defined(_GLIBCXX__PTHREADS) \
+        || defined(_GLIBCXX_HAS_GTHREADS)
       //
       // If the std lib has thread support turned on, then turn it on in Boost
       // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT

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

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

這速度實在是...

自從把大部分的東西外移以後,已經很久沒有用清大的網路了。
今天要幫學弟開 svn repository,去抓個 llvm source,結果看到了有趣的速度:

偉哉...
我拿家用 10m/2m 的 VDSL 抓下來傳上去還比這快,實在是太了不起了。
已經懶得再說什麼,單純發一篇久違的抱怨文。

用 gcc-4.3+ 編 graphics/graphviz 遇到 libgvc.so: undefined reference to `sincos' 錯誤時的解法

錯誤訊息:

gmake[3]: Entering directory `/usr/ports/graphics/graphviz/work/graphviz-2.28.0/cmd/dot'
CC dot-dot.o
CC dot-no_builtins.o
CC dot_builtins-dot.o
CC dot_builtins-dot_builtins.o
CCLD dot_builtins
CCLD dot
../../lib/gvc/.libs/libgvc.so: undefined reference to `sincos'
collect2: ld returned 1 exit status
gmake[3]: *** [dot] Error 1

FreeBSD 的 libm 裡目前還沒有實作 sincos 這個函式。
autoconf 產生出的 configure script 測出來會說有,是因為它的測試參數下得跟實際編譯時不一樣,會用到 GCC 的 built-in function。
這個老外已經有說解法了:
http://markmail.org/thread/okslhtdmwckdweed#query:+page:1+mid:okslhtdmwckdweed+state:results
就是跑完 configure 之後直接把測試結果 edit 掉。
在 FreeBSD 要做這種事很簡單,在 Makefile 的 post-configure 加點料就可以搞定:

--- Makefile.orig       2011-08-28 23:30:48.000000000 +0800
+++ Makefile    2011-08-28 23:30:44.000000000 +0800
@@ -432,6 +432,10 @@
                ${WRKSRC}/Makefile.in
 .endif
 
+post-configure:
+       @${REINPLACE_CMD} -e 's|^#.*HAVE_SINCOS.*$$|#undef HAVE_SINCOS|' \
+               ${WRKSRC}/config.h
+
 post-install: install-ldconfig-file
        cd ${WRKSRC}/lib/expr && \
                ${MAKE} ${INSTALL_TARGET}

使用 X server 遠端執行 VirtualBox 時一進入設定就會 Segmentation fault

這個問題是在 FreeBSD 8.2-STABLE 上遇到的,但我想其實跟 OS 無關。
主要是 Windows 上的 X server 不支援 OpenGL 加速,然後 VirtualBox 裡有一段測試 OpenGL 是否能運作的 code 沒寫好,結果就掛了。
會看到的錯誤訊息如下:

WARNING: QGLContext::makeCurrent(): Cannot make invalid context current
Segmentation fault

稍微看了一下,相關的判斷部分,都是透過檢查 QGLContext::makeCurrent() 的 return value 是否為 0 來判斷。
不過稍微 Google 一下就會發現,其實應該使用 QGLWidget::isValid() 來判斷才對。

我本身只會使用 X server 遠端從 shell 啟動 VirtualBox,沒有從 console 上執行的打算,所以上面這些部分都可以不管它。
在 emulators/virtualbox-ose 裡 make configure 以後,進去這個目錄:
work/VirtualBox-3.2.12_OSE/src/VBox/Frontends/VirtualBox/src/
照下面這樣修改 VBoxFBOverlay.cpp,把 OpenGL 加速整個當成不支援就好:

--- VBoxFBOverlay.cpp.orig      2010-12-02 01:09:27.000000000 +0800
+++ VBoxFBOverlay.cpp   2011-04-18 14:55:54.000000000 +0800
@@ -4755,6 +4755,7 @@
 /* static */
 bool VBoxQGLOverlay::isAcceleration2DVideoAvailable()
 {
+    return false;
 #ifndef DEBUG_misha
     if(!g_bVBoxVHWAChecked)
 #endif

至於有打算在 console 上跑,而且能用 OpenGL 加速的,就請自己去它下層呼叫的函式裡照上面的說法修正程式吧。
最近沒什麼動力幫這種東西 debug...

FreeBSD 在 mysql55-{server,client} 改用 CMake 建置後某些編譯選項無法傳遞

以往在 FreeBSD 編譯 databases/mysql55-{server,client} 時,要下這樣的參數:

make WITH_CHARSET=utf8 WITH_COLLATION=utf8_general_ci WITH_XCHARSET=complex install

不過因為在 MySQL 5.5.8 後的 build system 改成了 CMake,導致 ports maintainer 必須重新設計 Makefile。
而目前的 Makefile 尚未設計完善,所以想把這些 options 傳遞給 CMake 的話,只能直接改 Makefile 解決:

--- mysql55-server/Makefile.orig       2011-03-19 21:13:47.000000000 +0800
+++ mysql55-server/Makefile    2011-04-08 14:31:05.815962791 +0800
@@ -39,7 +39,10 @@
                -DINSTALL_SQLBENCHDIR="share/mysql" \
                -DINSTALL_SUPPORTFILESDIR="share/mysql" \
                -DWITH_LIBEDIT=0 \
-               -DWITH_LIBWRAP=1
+               -DWITH_LIBWRAP=1 \
+               -DDEFAULT_CHARSET="utf8" \
+               -DDEFAULT_COLLATION="utf8_general_ci" \
+               -DWITH_EXTRA_CHARSETS="complex"
 
 .ifdef USE_MYSQL
 .error You have `USE_MYSQL' variable defined either in environment or in make(1) arguments. Please undefine and try again.

如果在做這修改前不小心將沒設好的 MySQL 整套裝起來的話,請記得把 mysql55-client 也砍掉一起重裝。
特別是對那些真正需要用到 WITH_EXTRA_CHARSET="complex" 的人,有一邊沒弄好的話,網頁上就準備出現一大堆「???????」了。

至於是否能像以前那樣直接用 make 送參數,就只能慢慢等 maintainer,看他何時會重新把所有 options 對應上去了。

Apache 從 2.2.12 開始支援 SNI

其實這資訊 lag 了一年多了吧 (現在都 2.2.17 了)。
前幾週被人問到 SSL 時丟相關資訊給他,
才發現 wikipedia 的 SNI 那頁更新過了:Server Name Indication

這功能是從 Apache 2.3 merge 回來的:#34607 - Support for Server Name Indication
設定範例可以參考 Apache 的 wiki:SSL with Virtual Hosts Using SNI
其實設定上沒什麼新東西要注意,
一切都恢復到過去設 SSL vhost 的方式即可。
最多就是記得要擺 NameVirtualHost *:443SSLStrictSNIVHostCheck off 這兩行吧。

Continue reading Apache 從 2.2.12 開始支援 SNI »

拖稿很久的 LLVM 使用文

因為單純就是使用也沒有去動內部的東西,
所以這篇文從 llvm-2.1 一路拖到 2.7 才終於想寫。
對一些早就在用的人來說這內容應該也 lag 好幾年了,
總之都是些沒什麼技術性的東西。
所以我也不分類在 programming 而是 system diary 了。

Continue reading 拖稿很久的 LLVM 使用文 »

電機電子群高工學生失落的知識:電工數學

今天在某板看到一篇有趣的文章:

我並非天龍國大安國的國民,
也不是該國國境內某八大省工之一的名校學生,
所以我也無從得知他們現在的老師是否有教這些東西;
但是這些東西其實是電機電子群的高工學生們原本就有機會學到的。

只是這門課因為各式各樣的原因
所以早在相當久遠的年代以前就慘遭諸多學校以暗黑兵法做掉了。
這門課的課名就叫做電工數學

當然會求長進的學校絕對不是沒有,
所以即使現在真的還有學校在教這種東西,
我也一點都不感到意外。

Continue reading 電機電子群高工學生失落的知識:電工數學 »

並不是在不高興

偶而會聽到有一些人覺得我回技術性的文章,
或是在面對面回答問題時看起來不太高興;
但我只能說這是必要之惡

Continue reading 並不是在不高興 »

透過 pf 來限制某國 IP 才能存取某些 ports 的方法

簡單說就是鎖國啦。
這個上一手資訊來自機八林餅幹
忘記他是從哪邊看來的。
反正幾乎沒在出國的話把 ssh port 之類的鎖起來可以省很多力氣。

Continue reading 透過 pf 來限制某國 IP 才能存取某些 ports 的方法 »

Page 1 of 1412345678910...Last »