Linux Mint 11在我的電腦上有一些相容性問題,可能是AMD E350晶片太新kernel還沒有完全支援,所以前幾天把它升級成Linux Mint 12或13看看。雖然插耳機後聲音仍然從喇叭發出,還有執行32位元程式時gdk-pixbuf的問題修了,但是又冒出新問題。
我有開發32位元和64位元程式的需求,所以都是灌64位元作業系統再安裝64位元和32位元開發用套件。11版還沒有分,Linux Mint 12和13把同一個開發用套件(名稱裡有-dev的)分成i386和64位元兩個,而且64位元系統還不能安裝32位元套件,在Synaptic一選安裝就要我移除一堆套件,包括一些無關的系統程式,明顯是套件依存關係有問題。裝32位元執行用函式庫是還可以,不過在Synaptic看不到,要在終端機打apt-get 套件名:i386才能裝。
煩死了,升級常常碰到意想不到的問題。
試了好幾個版本確認Linux Mint 12、13和Ubuntu 11.10有此問題,查了一下發現是開發團隊想做一些改革,但是還沒解決這問題
https://wiki.ubuntu.com/MultiarchSpec
在此頁Unresolved issues的部分。
在他們解決問題之前可能要改用別的發行版開發了,Linux Mint可留著做相容性測試。
2012年10月5日
2012年5月14日
[程式]Linux 64位元版gdk-pixbuf問題
以前用自製東方音樂播放器的時候就有發現異狀,選檔案的視窗顯示不出icon,那時沒有特別去研究,四月做MMH新版installer的時候發生build好的程式在另一台電腦上不能執行的情況,於是開始研究這個問題。
從命令列執行看出現的訊息就看到問題出在哪了,是gdk-pixbuf的問題。程式是32位元的而不能執行的電腦是裝64位元系統,Linux Mint 64位元版把32位元函式庫放在lib32,64位元的放在lib資料夾下,但是執行32位元或64位元程式時gdk-pixbuf都會去lib載入圖檔解碼函式庫,所以執行32位元程式會出問題。
MMH本身不是透過gdk-pixbuf,而是直接用libpng、libjpeg做圖檔解碼,無此問題。
查了一下發現這個bug在Ubuntu 11.04(Linux Mint 11)開始有(我試過Linux Mint 10沒有此問題),不知為何到12.04都還沒修(我後來發現在Linux Mint 12有修了)。
用Linux碰過一堆相容性問題,我是不想再說什麼了。
解決方法之一是把這個ppa加入套件庫,然後開套件管理員更新ia32-libs。如果有人在PF16買的MMH沒辦法安裝在Linux,可參考一下。
https://launchpad.net/~micove/+archive/experimental
從命令列執行看出現的訊息就看到問題出在哪了,是gdk-pixbuf的問題。程式是32位元的而不能執行的電腦是裝64位元系統,Linux Mint 64位元版把32位元函式庫放在lib32,64位元的放在lib資料夾下,但是執行32位元或64位元程式時gdk-pixbuf都會去lib載入圖檔解碼函式庫,所以執行32位元程式會出問題。
MMH本身不是透過gdk-pixbuf,而是直接用libpng、libjpeg做圖檔解碼,無此問題。
查了一下發現這個bug在Ubuntu 11.04(Linux Mint 11)開始有(我試過Linux Mint 10沒有此問題),
用Linux碰過一堆相容性問題,我是不想再說什麼了。
解決方法之一是把這個ppa加入套件庫,然後開套件管理員更新ia32-libs。如果有人在PF16買的MMH沒辦法安裝在Linux,可參考一下。
https://launchpad.net/~micove/+archive/experimental
2010年11月1日
[程式]Linux版本間相容性問題之三
這一次的問題來源是libgio。
把Ubuntu 10.04版build的程式拿到Debian 4跑,結果找不到libgio不能執行
查一下各版本的套件列表
Debian 4:無libgio,不過Debian 4我已不打算再支援
Debian 5:有,是獨立的package
Ubuntu 10.04:gio放在gobject這個package
所以要用Linux得灌兩套,較新的版本用來用新軟體,較舊的版本用來build程式。
……事到如今我已經懶得再說什麼了,雖然這次問題比較小。
聽過有人抱怨Windows的強迫升級策略,不過用過Linux真的會很感謝Windows開發人員在相容性上做的努力,Linux軟體綁作業系統版本,想把軟體升級就要整個系統重灌,相較之下Windows可以把單獨的軟體拔掉換新版。
把Ubuntu 10.04版build的程式拿到Debian 4跑,結果找不到libgio不能執行
查一下各版本的套件列表
Debian 4:無libgio,不過Debian 4我已不打算再支援
Debian 5:有,是獨立的package
Ubuntu 10.04:gio放在gobject這個package
所以要用Linux得灌兩套,較新的版本用來用新軟體,較舊的版本用來build程式。
……事到如今我已經懶得再說什麼了,雖然這次問題比較小。
聽過有人抱怨Windows的強迫升級策略,不過用過Linux真的會很感謝Windows開發人員在相容性上做的努力,Linux軟體綁作業系統版本,想把軟體升級就要整個系統重灌,相較之下Windows可以把單獨的軟體拔掉換新版。
2010年9月12日
2010年8月15日
[程式]新專欄:Shark流程式教學
顧名思義就是介紹本人的程式技術。
點此進入
本來是在某個非公開的地方發表,現在我把它改編成網頁公開出來,目前先放兩篇。
因為本人已經有些程度,很多知識已經變成直覺,不用想就知道怎麼做,這篇寫得能不能讓新手看懂我也沒把握,對於內容有什麼問題可在此回覆。
點此進入
本來是在某個非公開的地方發表,現在我把它改編成網頁公開出來,目前先放兩篇。
因為本人已經有些程度,很多知識已經變成直覺,不用想就知道怎麼做,這篇寫得能不能讓新手看懂我也沒把握,對於內容有什麼問題可在此回覆。
2010年7月17日
[程式]Linux版本間相容性問題之二
把Ubuntu 8.04升級到9.10,然後執行一個以前在8.04版build的程式,結果因為找不到OpenAL而不能執行
查了一下,8.04版裝的OpenAL是libopenal0.so,但是9.10版的是libopenal1.so
上次是新版本build的程式在舊版本出問題,舊版本build的程式在新版本竟然也出問題
另外發現別人也碰過這個問題
http://forums.x-plane.org/index.php?showtopic=35064
我建一個符號連結命名為libopenal0.so,指向實際的OpanAL函式庫,結果就可以執行了,沒出什麼問題
…………
照理說是因為不能相容才需要改版本號,既然實際上可以用為什麼要改版本號啊?
查了一下,8.04版裝的OpenAL是libopenal0.so,但是9.10版的是libopenal1.so
上次是新版本build的程式在舊版本出問題,舊版本build的程式在新版本竟然也出問題
另外發現別人也碰過這個問題
http://forums.x-plane.org/index.php?showtopic=35064
我建一個符號連結命名為libopenal0.so,指向實際的OpanAL函式庫,結果就可以執行了,沒出什麼問題
…………
照理說是因為不能相容才需要改版本號,既然實際上可以用為什麼要改版本號啊?
2010年6月23日
2010年5月30日
[程式]Linux版本間相容性問題之一
談一下我寫Linux程式的經驗
大概是去年發生的事,只是因為blog最近才開所以現在才發。
由於Linux可免費取得,且可用跟Windows相同的硬體,所以我有裝一套Linux來玩,開發同人遊戲或寫程式時,也常在Windows版以外順便做個Linux版。
事情是這樣,我當時用的發行版是Ubuntu 8.04,公司用的是Debian 4,在Ubuntu 8.04 build了一個程式想說拿到Debian 4上執行看看,結果沒辦法,會跳找不到stack_chk_fail這個符號的訊息。
用objdump指令一查發現這個符號是glibc 2.4版以上才有,Debian 4的glibc是2.3版。
後來找到一個方法可正常執行,就是自己定義一個符號如下
void stack_chk_fail(){
return;
}
build出來就沒有glibc 2.4了,可以在Debian 4執行。
如果在Debian 4 build,在Ubuntu 8.04不會有問題。
看來要發佈的程式要在較舊的發行版build,才能在比較多環境執行,也要記得用objdump檢查一下。
有一就有二、三,待續。
大概是去年發生的事,只是因為blog最近才開所以現在才發。
由於Linux可免費取得,且可用跟Windows相同的硬體,所以我有裝一套Linux來玩,開發同人遊戲或寫程式時,也常在Windows版以外順便做個Linux版。
事情是這樣,我當時用的發行版是Ubuntu 8.04,公司用的是Debian 4,在Ubuntu 8.04 build了一個程式想說拿到Debian 4上執行看看,結果沒辦法,會跳找不到stack_chk_fail這個符號的訊息。
用objdump指令一查發現這個符號是glibc 2.4版以上才有,Debian 4的glibc是2.3版。
後來找到一個方法可正常執行,就是自己定義一個符號如下
void stack_chk_fail(){
return;
}
build出來就沒有glibc 2.4了,可以在Debian 4執行。
如果在Debian 4 build,在Ubuntu 8.04不會有問題。
看來要發佈的程式要在較舊的發行版build,才能在比較多環境執行,也要記得用objdump檢查一下。
有一就有二、三,待續。
2010年5月26日
訂閱:
文章 (Atom)