我开发了一个用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. 动态链接到静态链接?
- 3. import =动态链接? &include =静态链接?
- 4. 静态链接库FORTRAN与相互依存关系
- 5. 在C中静态链接#
- 6. 静态链接库
- 7. 链接静态stdlib.so
- 8. 静态链接glib2
- 9. gcc静态链接
- 10. 静态链接OpenCV
- 11. pthread静态链接
- 12. 静态链接libwinpthread
- 13. Angular的深层链接 - 动态链接vs静态链接
- 14. 链接静态库与静态库
- 15. UNIX:静态库链接到静态库
- 16. Visual Studio:静态链接到静态库
- 17. Android中模块的静态链接和动态链接
- 18. 链接到Expressjs中的静态文件中的静态文件
- 19. Libc的静态链接
- 20. 的Python 3.3静态链接
- 21. Qt:库的静态链接
- 22. Glibc的静态链接
- 23. 对链接的静态库
- 24. 替换php链接到静态链接
- 25. 将动态库链接到链接到其他静态库的静态库
- 26. Qt中的静态链接 - > VS 2008中的链接错误
- 27. 如何链接静态库中的Android
- 28. Xcode中静态链接id3lib的问题
- 29. 代码块中glibc的静态链接
- 30. 静态链接XCode中的OpenSSL
您不能静态链接一个DLL。您需要链接到lib文件(DLL的静态库版本)或用于构建DLL的对象文件。 –