将IVF编译的DLL链接到Qt

时间:2015-07-28 10:02:46

标签: qt dll fortran mingw

这是我第一次尝试图书馆集会,所以请怜悯!

我正在尝试将外部库(用.f90编写并在VS2012上用IVF编译)链接到我的Qt应用程序(基于Qt 5.5.0-MinGW 4.9.2的32位)。

我有几个问题:

1)这是徒劳的吗?我发现的一些研究表明,IVF和MinGW是ABI不兼容的。我真的想继续使用Qt中的MinGW编译器,因为基本上我们用软件做的其他事情都使用它。

2)能够仅在被调用时加载库(这仅代表一小部分情况)是有利的。出于这个原因,我一直在尝试使用QLibrary,但是当我尝试调用我的DLL中定义的SUBROUTINES(带有解析(" my_function"))时,我一直在尝试分段错误:

我已经将我的外部子程序定义为(在这个阶段只是一个简单的测试,对我想做的事情来说实际上并不重要!) 虽然我需要访问的实际代码要复杂得多(宝贝步骤!),但我写了一个简单的子程序来返回整数的平方:

SUBROUTINE SQ(a,asquare)
!DEC$ ATTRIBUTES C, REFERENCE, MIXED_STR_LEN_ARG, DLLEXPORT, ALIAS:"SQ" :: SQ
  integer, intent(in)  :: a             ! input
  integer, intent(out) :: asquare       ! output
  asquare = a**2
END SUBROUTINE SQ 

我导入库并在Qt中使用:

调用它
typedef int (*MyPrototype)(int i);
    MyPrototype Square = (MyPrototype) FAST.resolve("SQ");
    int K = 4;
    int J = Square(K);

这会导致隔离错误

3)有没有办法检查图书馆实际上是否已加载?当然调用子例程可以实现这一点,但这不起作用,当我导入库DLLname.load()时返回一个肯定的结果。和解析。(" sub_name")分配了一个memoryaddress。这是否表明存在类型错误? IE浏览器。将错误的标识符传递给fortran代码。

再一次,感谢阅读,请随意分解我的逻辑缺陷,我不是程序员!

0 个答案:

没有答案