2010-10-11 66 views
1

我的C應用程序依賴於一些文件進行復制。這些文件是否包含在可執行文件中,而不是作爲獨立文件?它是否必須靜態鏈接?如果有問題,我正在使用Eclipse CDT。可以將文本文件和其他文件打包成C可執行文件

+0

這個問題並不清楚。將[壓縮] [1] exe文件和文件放在一起並分發壓縮文件是一個選項? [1]:http://en.wikipedia.org/wiki/ZIP_%28file_format%29 – Arun 2010-10-11 01:29:28

+0

不,我的意思是文本文件只能在可執行文件中訪問。它們包含在可執行文件中,而不是文件系統中。 – 2010-10-11 01:33:13

+0

我明白了。然後,首先想到的選項是創建一個'[static] const char * file_contents = ...'來保存該文本。 – Arun 2010-10-11 01:38:08

回答

3

有幾種方法可以將文件數據鏈接到可執行文件中。像Windows這樣的平臺允許您將數據作爲「資源」鏈接到可執行文件,並提供API來訪問這些資源(圖標和其他對象如何綁定到Windows可執行文件中)。如果你的平臺支持它,這可能是最好的方式 - 對它的支持是內置在IDE中的。

在一個較低的水平,你可能能夠使用鏈接直接鏈接文件轉換成可執行作爲尋址對象:

最後,如果你是處理像一些嵌入式平臺這樣的更原始的系統,您可以通過將文件轉換成C語言數組的字節來運行文件:

+0

+1選項的良好調查。 – bstpierre 2010-10-11 15:40:30

0

否。可執行文件僅包含編譯器和鏈接器的輸出。您的程序需要的任何輔助文件必須單獨打包。

1

除非您做了特別的事情,否則這些文件將不會包含在您的可執行文件中。你有沒有理由不能使用你的應用程序發佈文本文件?

如果要將文件烤到你的可執行文件,您可以在常量字符串烤他們:

const char myTextFileData[] = "the text of the file goes here"; 

當然,你必須預處理的文本文件到C源文件(記得要適當轉義引號,反斜槓,換行符和其他控制字符)。或者,您可以使用諸如objcopy之類的工具將文件數據直接轉換爲目標文件,然後將該目標文件鏈接到可執行文件中。

相關問題