2017-01-30 50 views
0

是否可以使用鏈接描述文件或映射文件來重命名符號? 我正在嘗試修改一些混合使用C++和Fortran編寫的代碼,以便它可以在Linux上使用多個Fortran編譯器。它目前是爲Solaris Studio編譯器編寫的,並且啓用了區分大小寫選項。我想自動處理Fortran符號名稱中的變體(例如從Makefile中)。使用鏈接描述文件重命名符號

它似乎可以創建別名左右,包含鏈接腳本:

C_Function_ = c_function; 

將排序的工作。不幸的是,添加-T選項來引用這個腳本會導致一些其他的行爲變化,並且由於沒有找到libdl.so.2/librt.so.1而導致錯誤。是否有某種我需要包含的默認鏈接器腳本或其他內容?我已經在Linux上嘗試了bfd和gold連接器。

回答

2

你真的不能重命名符號,但是你可以定義別名現有符號像

PROVIDE(c_function = C_function_); 
... 
在鏈接腳本

如果你通過這個鏈接腳本與-T選項ld,它將取代原始(默認)鏈接腳本。如果您希望鏈接描述文件擴展爲默認值,請在不使用-T選項的情況下傳遞它(就像使用其他對象文件一樣)。

這樣,一切都應按預期工作。

+0

謝謝,省略'-T'解決了這個問題。 「PROVIDE」做什麼?這可以防止它在符號被編譯到共享庫的情況下工作。 – okapi

+0

'PROVIDE()'確保符號只有在所使用的名稱不存在時纔是別名。但不知道爲什麼這會與構建共享庫相沖突。 – mfro