我用C編寫一個Linux程序,和我想要得到它的服務器系統上運行。它看起來像一切都沒有問題,但是當我嘗試它,我得到這個:如何爲另一臺機器編譯Linux可執行文件?
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by <program>)
/lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libdbi.so.1)
(其中<program>
是我的程序的名字)
到目前爲止,我所知道的,我的程序只需要版本GLIBC,因爲libdbi。我試過從源代碼編譯libdbi,它仍然試圖鏈接到該版本的GLIBC。
我沒有自己的服務器系統(這是一個共享系統,我運行一個網站,並有SSH訪問權限),所以我不能對它做任何更改 - 這就是爲什麼庫文件在相同的目錄,並且我設置了LD_LIBRARY_PATH=.
。不幸的是,我也沒有訪問它的編譯器 - 當我嘗試運行GCC時,我被告知「權限被拒絕」。它由一家大公司經營,我只有一個客戶;他們根據我的要求做出任何更改的機會基本上都是零。
有什麼辦法來編譯我的系統上的程序,以便它會在服務器上運行?
之前,我問,我發現這些類似的問題:
Compile C program in Linux with different glibc library:在答案的鏈接都到了404頁,從我已經能夠確定,
apgcc
不可用在Debian發行版上。Relink a shared library to a different version of libc:似乎說這個問題不存在,因爲「glibc往往是向後兼容的」(除非他們顯然不是這種情況)。
How to compile Linux C program to run on another Linux machine?:建議一個
chroot
或虛擬機,我已經在其他地方完成了,但我怎麼能告訴它使用沒有舊的GLIBC版本的libc?is binary executable file portable:建議靜態聯,但
libdbi
動態鏈接到它的驅動程序文件,這樣顯然不能這樣做 - 我得到指缺失功能的幾個這樣的錯誤ldopen
。
還有其他的,但他們似乎是在這些變化。
我會願意使用非免費的解決方案(如一個,我在另一個答案,我現在找不到所看到的),如果我把它變成一個商業產品,但是對於單用它看起來像巨大的矯枉過正,更不用說費用了。
有沒有辦法簡單地告訴libdbi鏈接到更高版本的GLIBC,也許?如果不是,有沒有我忽略的解決方案?
謝謝。打開他們使用CentOS6,這顯然只能通過2.12提供GLIBC x版本了 - 我沒有意識到的libc向後兼容性被打破了這樣。 :-(無論如何,我抓住這個操作系統的安裝DVD的圖像,我會爲它創建一個虛擬機,並嘗試編譯它。 –