incompatible

搞電腦的不管是軟體還是硬體,最怕也最討厭的名詞與況狀之一就是incompatible (不相容)了。自從重裝完咖啡香的系統後,一直有些小毛病,後來終於被我找到原因,原來是 MySQL, PHP 間的版本問題搞的鬼。

一開始在安裝 CentOS 4.1 的過程中,我就沒有選擇安裝 MySQL 和 PHP,而是打算自已用 source 來 build,因此安裝完 OS 後我就自已 build 了 MySQL 4.0.26 和 PHP 4.4.0。結果在 PHP 存取 MySQL 時就一直出現如下的錯誤

File 'NONEXISTENT/charsets/?.conf' not found (Errcode: 2)
Character set '#24' is not a compiled character set and is not specified in the 'NONEXISTENT/charsets/Index' file

找了很久才發現是因為我在設定 PHP 的參數 –with-mysql 時,忘了指定安裝 mysql 的路徑 (/usr/local/mysql) ,結果它就自已去找了 /usr/lib/mysql 裡預先裝好了的 MySQL 4.1 。這樣一來就變成我 run 的 MySQL 和 PHP 連結 MySQL 時用的 lib 是不同的版本。
但我一開始安裝時並沒有選擇要安裝 MySQL 呀?!而當我想把 MySQL 4.1 的 RPM 移掉時才發現,原來是因為 dovecot IMAP/POP3 套件與 MySQL 相依,所以 MySQL 就被強制安裝了>”<。 於是我便重新指定 "--with-mysql=/usr/local/mysql" 來 build PHP 以解決這個問題,結果又出現如下的錯誤 [code]ext/mysql/php_mysql.lo(.text+0x2040): In function `zif_mysql_create_db': /var/temp/php-4.4.0/ext/mysql/php_mysql.c:1160: undefined reference to `mysql_create_db' ext/mysql/php_mysql.lo(.text+0x2253): In function `zif_mysql_drop_db': /var/temp/php-4.4.0/ext/mysql/php_mysql.c:1202: undefined reference to `mysql_drop_db'[/code] 這又讓我花了點時間,才找到是因為 PHP 使用了 MySQL 4 預設不編譯的 3.x 舊 function 所以要在 build MySQL 時指定 CFLAGS=-DUSE_OLD_FUNCTIONS 的環境變數, [code]./configure --prefix=/usr/local/mysql --with-charset=big5 CFLAGS=-DUSE_OLD_FUNCTIONS[/code] 所以只好先又重新 build MySQL 一次,這樣一來一返的就又浪費了不少時間才總算是把系統全就搞定。 incompatible! 我恨你!

作者: yanni

14, Feb 1977

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料