本帖最后由 kyra 于 2020-3-25 09:05 编辑
各位老师好:我现在有个问题想请教大家,谢谢:
我现在想在vs2015下用x64平台intel fortran进行动态链接库dll中的函数进行调用(c++生产)。
动态链接库函数也是在vs2015平台下,用x64 debug环境下生产。具体代码如下:
lib.cpp代码如下
[C] 纯文本查看 复制代码 #include <Windows.h>
#include <stdio.h>
#include <intrin.h> // 所有Intrinsics函数
extern "C" void _cdecl abc(int *a)
{
*a = *a+2;
}
extern "C" void _cdecl getstr(char *st)
{
sprintf_s(st, 10, "%8s", "abc");
//strCPUId += buf; _cdecl
//st = "abc";
}
lib.h代码如下
[C] 纯文本查看 复制代码 #pragma once
#ifndef LIB_H
#define LIB_H
extern "C" void _cdecl abc(int *a);
extern "C" void _cdecl getstr(char *st);
#endif
lib.def 代码如下
[C] 纯文本查看 复制代码 LIBRARY "dlltt"
EXPORTS
abc @ 1
getstr @ 2
编译链接后,生产动态链接库。拷贝到intel fortran的工程下。
然后在vs2015 x64 debug环境下用intel fortran 调用abc() 和 getStr() 函数。
fortran 代码如下:
[Fortran] 纯文本查看 复制代码 !****************************************************************************
!
! PROGRAM: Console1test
!
! PURPOSE: Entry point for the console application.
!
!****************************************************************************
module computer
interface
!---------------------------------------------
subroutine abc(scput)
!! use iso_c_binding
!DEC$ATTRIBUTES C,ALIAS:'_abc'::ABC
!DEC$ATTRIBUTES reference::scput
integer scput
end subroutine
!! subroutine getstr(strr)
!! use iso_c_binding
!! !DEC$ATTRIBUTES C,ALIAS:'_getstr'::GETSTR
!! !DEC$ATTRIBUTES reference::strr
!! character strr(50)
!! end subroutine
!-----------------------------------------------
end interface
end module
program Console1test
use computer
! use, intrinsic :: iso_c_binding
! Variables
character sss(50)
integer :: ii=5
! Body of Console1test
!call getstr(str)
call abc(ii)
write(*,*) ii
!! call getstr(sss)
!! write(*,*) sss
print *, 'Hello World'
end program Console1test
以上的程序代码在vs2015 x86 debug下没有问题,我试验过。就是在x64位下出现找不到abc() 等函数的错误;不知道什么原因。
错误如下:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 error LNK2019: 无法解析的外部符号 _abc,该符号在函数 MAIN__ 中被引用 Console1test.obj
请大家帮忙解决一下。谢谢!
|