我開發了一個用C++編寫的管理我公司產品許可證的模塊。爲了防止DLL替換,我們的目標是在解決方案中靜態鏈接DLL。這在C++中很容易實現,但對於用Fortran編寫的代碼庫部分代碼來說有點問題。我認識到,這可能會有所不同,從編譯器到編譯器(我們使用英特爾Fortran 9.1),但是有什麼通用的方法來實現靜態鏈接的Fortran C++ DLL嗎?Fortran中的靜態鏈接
回答
要獲得靜態鏈接,通常的方法不是使用DLL,而是使用簡單的庫(* .lib)。這與編程語言無關:它僅取決於操作系統。
構建庫也比構建DLL更簡單。在Unix上,庫具有後綴.a,而DLL具有後綴.so(用於共享對象)。
儘管如此,通常可以靜態鏈接一個DLL,但這是通過傳遞給鏈接器的特定選項獲得的。例如在Unix上,有許多編譯器套件,選項是-static或-Bstatic。在編譯器的編程手冊中查看關鍵字「static」。
如果您有權訪問源代碼,只需將其編譯爲目標文件並將其鏈接到Fortran項目。 ISO_C_BINDING應該適用於許多編譯器。
另外,在Windows上使用dumpbin或在Linux上使用objdump來查看二進制文件的符號表。這會告訴你是否存在重名問題。對於現代編譯器,我不認爲它應該是一個問題。 – bdforbes
你可以進一步擴展?我是一個完整的Fortran新手。 –
Fortran ISO_C_BINDING允許您精確指定例程名稱並克服名稱修改問題。 –
- 1. 鏈接到鏈接到靜態.lib的靜態.lib的問題
- 2. 在C中靜態鏈接#
- 3. 靜態鏈接OpenCV
- 4. gcc靜態鏈接
- 5. 鏈接靜態stdlib.so
- 6. pthread靜態鏈接
- 7. Angular的深層鏈接 - 動態鏈接vs靜態鏈接
- 8. UNIX:靜態庫鏈接到靜態庫
- 9. Android中模塊的靜態鏈接和動態鏈接
- 10. 鏈接到Expressjs中的靜態文件中的靜態文件
- 11. Glibc的靜態鏈接
- 12. Qt中的靜態鏈接 - > VS 2008中的鏈接錯誤
- 13. Docker中的靜態鏈接Haskell程序
- 14. 鏈接ios中的靜態庫
- 15. 在gcc中的靜態鏈接(mingw)
- 16. 靜態鏈接XCode中的OpenSSL
- 17. 如何鏈接靜態庫中的Android
- 18. 代碼塊中glibc的靜態鏈接
- 19. Sqlite 3.7.10和Delphi中的靜態鏈接
- 20. fortran C++鏈接庫
- 21. 靜態鏈接優勢
- 22. 靜態鏈接SHFolder組件
- 23. 靜態庫鏈接失敗
- 24. 鏈接到靜態庫
- 25. 靜態庫鏈接兩次
- 26. boost.log錯誤鏈接靜態
- 27. Mongoose靜態鏈接與libssl?
- 28. 靜態鏈接OpenCV 2.4.3.2
- 29. GPL/LGPL和靜態鏈接
- 30. django-localeurl和靜態鏈接
您不能靜態鏈接一個DLL。您需要鏈接到lib文件(DLL的靜態庫版本)或用於構建DLL的對象文件。 –