2010

在 64-bit 的 Linux 中,用 32-bit 的 gcc 產生 32-bit 的 binary…

噢!這個標題真是個亂七八糟的組合……XDD

看起來很好笑,但實際遇到就很難笑出來了。

在這樣的組合下,若是我們直接執行 gcc 的話,會有下列的錯誤訊息:

$ gcc test.c
/tmp/cc7YTML2.s: Assembler messages:
/tmp/cc7YTML2.s:13: Error: suffix or operands invalid for push'
/tmp/cc7YTML2.s:14: Error: suffix or operands invalid for '
/tmp/cc7YTML2.s:16: Error: suffix or operands invalid for push'
/tmp/cc7YTML2.s:25: Error: suffix or operands invalid for '
/tmp/cc7YTML2.s:26: Error: suffix or operands invalid for pop'</pre>
<p>會有這樣的錯誤訊息,主要是因為 gcc 產生了 32-bit 的 assembly file,餵給 as (assmebler);但此時系統裝的 as 卻是 64-bit 版的,因此預設會用 64-bit 的方式去組譯 32-bit 的 assembly,結果當然是出不來。</p>
<p>as 有個參數 -32’,可以強制 as 用 32-bit 的方式去組譯。我們可以把原本 gcc 幫我們做的動作拆成下列的分解動作,手動編譯 test.c:

$gcc -S test.c            # 編譯,產生 test.s
$as -32 -o test.o test.s  # 以 32-bit 模式組譯,產生 test.o
$gcc -o test.out test.o   # 產生執行檔

但每個程式這樣做不是很麻煩嗎(笑)?還好,gcc 另外提供了一個方法,可以把參數送給 as:

$gcc -Wa,-32 -o test.out test.c

要注意 32 前面的減號不能省略。這樣做就 ok 了。

[筆記] FreeBSD 設定上的相關問題…

問題:
更新 port tree 之後,安裝 port 出現下列的錯誤訊息:
X11BASE is now deprecated.  Unset X11BASE in make.conf and try again.
*** Error code 1
Stop.
解決方法:
/etc/make.conf 中加入下列一行:
X11BASE=${LOCALBASE}

參考網站:http://forums.freebsd.org/showthread.php?t=13030


問題:
在 private network 中的機器,執行 apachectl start 後,沒有錯誤訊息,但 httpd 沒有起來。查看 /var/log/httpd-error.log 看到下面的錯誤訊息:

[Sat Jun 05 00:20:46 2010] [alert] (EAI 8)hostname nor servname provided, or not known: mod_unique_id: unable to find IPv4 address of "host.name.and.domain"
Configuration Failed

其中 host.name.and.domain 是 host 的 domain name。

解決方法:
原因是 httpd 找不到該 domain name 的 IP。在 /etc/hosts 中加入下列兩行:
10.1.1.203              host.name.and.domain host
10.1.1.203              host.name.and.domain.

記得將 10.1.1.203 代換成這台機器的虛擬 IP。


問題:
啟動 Apache2.x 時都會出現錯誤訊息 :Failed to enable the 'httpready' Accept Filter

解決方法:
原因是沒有安裝 accf_http 這個 kernel module。手動動態安裝的方法是在 shell 中鍵入以下指令:

> kldload accf_http

再 restart apache 即可。若要開機時自動載入,請在 /boot/loader.conf 加入下面這行:

accf_http_load="YES"

參考資料:

新年快樂!

呃.... 今天才赫然發現還沒在 blog 貼今年的賀年卡... orz
(可見這個地方被荒廢多久了....)

最近這一年我的網路重心都移到噗浪上面,blog 幾乎是被我遺忘了(汗)。現在大概沒幾個人在盯這個 blog 了吧?

無論如何,還是要在這兒祝大家新年快樂!
(反正要到正月十五才算過完年,現在拜年還不算太遲!)