我开发了一个用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的对象文件。 –