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檢查一下。
有一就有二、三,待續。

沒有留言:

張貼留言