2011-10-13 146 views
3

我開發了一個用C++編寫的管理我公司產品許可證的模塊。爲了防止DLL替換,我們的目標是在解決方案中靜態鏈接DLL。這在C++中很容易實現,但對於用Fortran編寫的代碼庫部分代碼來說有點問題。我認識到,這可能會有所不同,從編譯器到編譯器(我們使用英特爾Fortran 9.1),但是有什麼通用的方法來實現靜態鏈接的Fortran C++ DLL嗎?Fortran中的靜態鏈接

+0

您不能靜態鏈接一個DLL。您需要鏈接到lib文件(DLL的靜態庫版本)或用於構建DLL的對象文件。 –

回答

1

要獲得靜態鏈接,通常的方法不是使用DLL,而是使用簡單的庫(* .lib)。這與編程語言無關:它僅取決於操作系統。

構建庫也比構建DLL更簡單。在Unix上,庫具有後綴.a,而DLL具有後綴.so(用於共享對象)。

儘管如此,通常可以靜態鏈接一個DLL,但這是通過傳遞給鏈接器的特定選項獲得的。例如在Unix上,有許多編譯器套件,選項是-static或-Bstatic。在編譯器的編程手冊中查看關鍵字「static」。

1

如果您有權訪問源代碼,只需將其編譯爲目標文件並將其鏈接到Fortran項目。 ISO_C_BINDING應該適用於許多編譯器。

+0

另外,在Windows上使用dumpbin或在Linux上使用objdump來查看二進制文件的符號表。這會告訴你是否存在重名問題。對於現代編譯器,我不認爲它應該是一個問題。 – bdforbes

+0

你可以進一步擴展?我是一個完整的Fortran新手。 –

+0

Fortran ISO_C_BINDING允許您精確指定例程名稱並克服名稱修改問題。 –