2013-10-28 85 views
0

我用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時,我被告知「權限被拒絕」。它由一家大公司經營,我只有一個客戶;他們根據我的要求做出任何更改的機會基本上都是零。

有什麼辦法來編譯我的系統上的程序,以便它會在服務器上運行?

之前,我問,我發現這些類似的問題:

還有其他的,但他們似乎是在這些變化。

我會願意使用非免費的解決方案(如一個,我在另一個答案,我現在找不到所看到的),如果我把它變成一個商業產品,但是對於單用它看起來像巨大的矯枉過正,更不用說費用了。

有沒有辦法簡單地告訴libdbi鏈接到更高版本的GLIBC,也許?如果不是,有沒有我忽略的解決方案?

回答

1

大公司或不是,他們欠你的,如果你正在爲以任何方式的服務或正在支付的發展,以滿足一個要求是運行時環境的細緻描繪,因此您可以複製它在開發機器上最少。

然後你必須着手系統地複製這個環境。既然你使用libdbi你應該徹底。數據庫連接可以執行大量的系統API,所以你想要有完全相同版本的Linux,gcc(即使你不能運行它,你需要知道系統的其他部分被編譯的版本),和其他工具和庫。如果你不這樣做,你將無法相信你的開發機器測試會轉化爲目標上的良好行爲。

虛擬機是創建專用開發環境的好方法,不會混淆現有的開發環境。

+0

謝謝。打開他們使用CentOS6,這顯然只能通過2.12提供GLIBC x版本了 - 我沒有意識到的libc向後兼容性被打破了這樣。 :-(無論如何,我抓住這個操作系統的安裝DVD的圖像,我會爲它創建一個虛擬機,並嘗試編譯它。 –

0

您有以下選擇:

  • 編譯您的服務器計算機上的代碼(這可能已經安裝了GCC)
  • 與靜態鏈接庫的編譯程序(選項-static海合會)
+0

謝謝,但這些選項都不可用。 'libdbi'不能靜態編譯,而且我沒有權限在服務器上使用GCC。有關這兩者的詳細信息,請參閱原始問題。 –

2

您必須在與目標計算機具有相同glibc版本的機器或較舊版本的機器上進行編譯。共享庫兼容性僅適用於該方向。

1

找出什麼版本的Linux服務器使用,得到它的拷貝,並在VM

Virtualbox中安裝好這個

您可以使用測試代碼這個環境以及本特別編譯問題

相關問題