2012-07-19 79 views
0

我有一臺遠程Unix服務器,我想運行各種程序。我可以很容易地建立一個運行Unix的本地虛擬機,我可以編譯我的程序。麻煩的是,將Unix程序從一臺主機移到另一臺主機似乎總是失敗。 :-(將Unix程序從一臺主機移植到另一臺主機

例如,我編譯了test在一個OpenSUSE 11.4系統上,並試圖運行它,它工作得很好,但後來我將編譯後的二進制文件複製到Debian 6.0.3系統,現在拒絕運行。相反,我只是得到

測試:錯誤而載入共享庫:libgmp.so.10:無法打開共享對象文件:沒有這樣的文件或目錄

想必安裝編譯器還安裝所有依賴性 - 但只在本地機器上。我大概必須以某種方式我需要放在遠程機器上的依賴關係。

最重要的是,我沒有shell訪問遠程機器的權限。我只有FTP。所以我不能安裝什麼。我只能將文件複製到它。所以我想知道我是否可以將複製將必要的共享庫複製到編譯後的二進制文件所在的文件夾中。這會起作用嗎?或者我會不得不做更復雜的事情?

+0

你是如何在遠程計算機上執行程序無殼?您需要能夠設置環境變量來顯示共享庫的位置,除非您只是靜態鏈接整個事情。 (http://stackoverflow.com/questions/1437393/shared-libraries-in-same-folder-with-app-in-tcsh可能會幫助你,雖然沒有訪問一個shell,也許不會。) – geoffspear 2012-07-19 12:27:06

+0

二進制是應該的通過CGI運行。用合適的URL指向Web瀏覽器會導致二進制文件運行。或者,吐出鏈接錯誤 - 但不能讀取任何地方。 :-( – MathematicalOrchid 2012-07-19 12:29:37

回答

1

我認爲,根據情況,你最好的選擇是編譯一個靜態二進制文件;請參閱-static選項gcc。然而,這有缺點,可能並不總是奏效。

您也可以嘗試複製共享庫,但你需要指示動態加載程序來搜索您添加它們的位置庫(二進制文件必須與-Wl,-rpath,/path/to/libs交換機相連。

嘗試-static首先,它應該更容易

如果你想採取更深入地瞭解二進制便攜性的問題,檢查出像來源:。

+0

我沒有使用GCC,因爲程序不是用C語言編寫的。但是,由於您提供的鏈接,我發現了一個名爲'cde'的系統,它看起來像我想要的。 – MathematicalOrchid 2012-07-19 14:09:57

+0

您可以鏈接這個''''cde'''的主頁/手冊頁?我不知道它是什麼/ – Unknown 2012-07-19 14:23:19

+0

http://www.pgbovine.net/cde.html – MathematicalOrchid 2012-07-19 14:50:57

相關問題