2013-12-11 62 views
2

我需要在我的項目中包含一個二進制程序。我使用objcopy從二進制文件創建一個對象文件。目標文件可以在我的程序中鏈接。 objcopy創建適當的符號來訪問二進制數據。刪除objcopy符號名稱中的路徑

objcopy -I binary -O elf32-littlearm --binary-architecture arm D:\Src\data.jpg data.o 

所生成的符號是:

_binary_D__Src_data_jpg_end 
_binary_D__Src_data_jpg_size 
_binary_D__Src_data_jpg_start 

的問題是,這些符號包括路徑二進制文件D__Src_。這可能有助於從不同位置包含二進制文件。但是當我從不同的位置獲取文件時,符號會發生變化,這讓我感到困擾。由於這將在多個構建站上運行,因此無法使用--redefine-sym選項來剝離該路徑。

如何擺脫符號名稱中的路徑?

+1

可能重複(http://stackoverflow.com/questions/15594988/objcopy-prepends-directory-pathname-to-symbol -name) – Daniel

+0

@Daniel你讀過了,*爲什麼*我拒絕了'--redefine-sym'方法? – harper

+0

我同意--redefine-sym不是一個好的解決方案,但我認爲你的問題與OP基本相同。 順便說一句:我正在尋找同一個問題的答案。我目前的解決方法是將文件複製到目錄中,然後執行objcopy然後在Makefile - 醜陋的kludge中複製副本。我想你也可以cd到源目錄並將objcopy的輸出重定向回orignal目錄。 - 仍然是海事組織。 – Daniel

回答

0

switch --localize-symbols適用於我。

+0

這個答案的嘗試不顯示如何從符號中刪除路徑。 - 在命令行中添加'--localize-symbols'時,我收到了很多這樣的信息:「忽略在這一行上找到的垃圾」。 '--localize-symbols'需要額外的文件,你是如何用有意義的內容填充這個文件的? – harper

0

我在使用objcopy把這個開關解決了這個問題:

--prefix截面= ABC

這提供了一種方式來唯一地標識您的二進制目標文件中的數據(例如binary.o )

在鏈接描述文件中,您可以在包含binary.o的位置定義自己的標籤。由於您不再引用binary.o中的任何內容,因此如果使用-gc-sections開關,二進制文件將被鏈接程序拋出。 binary.o中的部分現在是abc.data。在鏈接器腳本中使用KEEP可以告訴鏈接器不要丟棄binary.o。你的鏈接腳本將包含以下內容:[objcopy把預規劃的目錄路徑名符號名稱]

__binary_start__ = .; 
KEEP(*(abc.data)) 
binary.o 
*(abc.data) 
. = ALIGN(4); 
__binary_end__ = .;