2012-07-11 71 views
5

我已經在我的計算機(Ubuntu 12)上成功編譯了一個程序(包括SDL),並且a.out運行得很好!在另一臺計算機上運行a.out

現在,如果我將a.out發送給朋友,它就不起作用。 (給出簡單的錯誤信息("Can't be run..")或其他東西) 但是,如果我再次在我的朋友計算機上編譯相應的源文件,它的工作原理!

如何打包/編譯/讓我的程序在其他計算機上運行?

+2

他可能沒有兼容版本的庫 - SDL,glibc,甚至可能是libstdC++。你有什麼版本,他有什麼版本?您可能能夠靜態鏈接您的二進制文件,否則您將不得不編譯您希望支持的最低版本庫。 – Rup 2012-07-11 13:03:45

+0

可能需要對exe文件進行chmod操作,但是下面的答案適用,並且我會建議 – mathematician1975 2012-07-11 13:04:33

+9

這是一個很好的問題。四十年來,沒有人提出一個簡單的答案。 – 2012-07-11 13:05:23

回答

5

可執行文件通常特定於創建它們的環境/機器。即使涉及相同的處理器/硬件,也可能依賴庫來阻止可執行文件在其他機器上運行。

你可以發送源代碼的指令來編譯嗎?假設沒有NDA或其他問題阻止這種做法(我只建議,因爲你提到這個工作適合你)

當然,最後它是可能,畢竟這是如何分發二進制文件,但他們將被精心構造,並將有靜態鏈接庫(即一切都是可執行文件的一部分)。

+0

我現在還沒有源代碼,但是這裏的代碼片段應該具有相同的效果:http://lazyfoo.net/SDL_tutorials/lesson01/linux/cli/index.php – user1511417 2012-07-11 13:07:07

+0

我認爲SDL是問題.. dunno – user1511417 2012-07-11 13:08:49

+0

可能@ user1511417,我不熟悉它。但是,這並不是一個你經歷過的不常見的問題/困境(分發軟件)。 – Levon 2012-07-11 13:09:39

0

請你的朋友做到以下幾點:

chmod +x a.out 
ldd a.out 

他看到了什麼?當然,我認爲這兩種環境基本上是相似的(例如,兩者都運行Ubuntu等)。

+0

我認真想,這是他需要的。此外,如果可以的話,在源代碼可用時分發二進制文件是你應該避免的(我猜這裏沒有涉及NDA)。 – Aftnix 2012-07-11 13:32:38

相關問題