2011-10-13 56 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允许您精确指定例程名称并克服名称修改问题。 –