簡體   English   中英

如何在其他筆記本電腦上運行在我的筆記本電腦gcc環境中創建的可執行文件a.out?

[英]How to run executable file a.out created in my laptop gcc environment in other laptops?

我已經用c編寫了程序代碼,並在gcc編譯器中執行了該代碼。 我想共享程序的可執行文件而不共享實際源代碼。 有什么方法可以共享我的程序而無需透露實際源代碼,以便可執行文件可以在具有gcc編譯器的其他計算機上運行?

有什么方法可以共享我的程序而無需透露實際源代碼,以便可執行文件可以在具有gcc編譯器的其他計算機上運行?

TL; DR :是的,提供了比僅具有GCC更大的相似度。 只需將二進制文件和任何需要的輔助文件復制到兼容的系統並運行它。


更詳細

在沒有源代碼的情況下分發已編譯的二進制文件以在除那些二進制文件所在的計算機之外的其他計算機上執行是很常見的。 這種分發方式確實存在潛在的兼容性問題(如下所述),但是源分發也是如此。 廣義地說,您只需將二進制文件和任何需要的支持文件安裝(復制)到兼容系統上的適當位置,然后執行它們即可。 這是大多數商業軟件的分發方式。

架構依賴

編譯的二進制文件當然特定於特定的硬件體系結構,或者在某些特殊情況下特定於兩個或更多體系結構的小型預定集(例如,舊的Mac通用二進制文件)。 您將無法在與其所構建的硬件完全不同的硬件上運行二進制文件,但是“體系結構”與CPU模型完全不同。

例如,有很多實現x86_64體系結構的CPU。 針對該體系結構的大多數程序都可以在任何此類CPU上運行。 實際上,x86體系結構與x86_64足夠相似,因此大多數為x86構建的程序也可以在x86_64上運行( 反之則不行)。 可以引入更細粒度的硬件依賴關系,但默認情況下通常不會獲得這種依賴關系。

操作系統依賴性

此外,大多數二進制文件都構建為在主機操作系統的上下文中運行。 您將無法在與為其構建二進制文件的操作系統完全不同的操作系統上運行二進制文件。

例如,Linux二進制文件不能(直接)在Windows上運行。 Windows二進制文件無法(直接)在OS X上運行。

圖書館依賴

此外,針對共享庫構建的程序需要在運行時環境中可用的每個必需共享庫的兼容版本。 不一定必須與構建該版本時使用的版本完全相同; 這取決於庫,使用了哪些函數和數據,以及它們是否以及如何隨時間變化。

您可以通過靜態鏈接每個所需的庫(高達C標准庫並包括C標准庫)或通過分發共享庫以及二進制文件來避免此問題。 但是,僅解決此問題是相當普遍的,因此,使用二進制分發僅支持所有可能環境的一部分。

其他

確實存在其他潛在的兼容性問題,但是對於您自己編寫並希望發布的程序,它們中的任何一個都不太可能使您感到驚訝。 例如,如果您在程序中使用nVidia CUDA,則可能需要nVidia GPU,但是您一定會很熟悉這種要求。

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

僅使用“標准庫”並靜態鏈接所有庫的程序不需要任何其他依賴項(從某種意義上說,它需要的所有代碼都在二進制文件本身或OS庫中,而OS庫是系統本身的一部分,已經在系統上)。

您必須靜態鏈接標准庫。 否則,只有在默認情況下在操作系統中安裝了編譯器標准庫的版本時,它才起作用(通常,您不能依賴它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM