|
本帖最后由 penultimate 于 2021-1-13 13:02 编辑
纯粹出于技术研究,搞一个C++/FORTRAN混编的小程序,在底层DLL中定义一个MODULE,其中的变量直接导出,给C++用(不想用SUBROUTINE,忒麻烦)。以前用的是Studio 2010 + IVF 11,编译链接都挺干净的。最近升到Studio 2019+IVF2019,出现了一堆警告,有点儿编程洁癖,请教一下大神怎么屏蔽,或者可以有其它的方法从MODULE中直接导出变量给C++直接使用。
底层DLL代码中的MODULE定义:
MODULE modVariables
USE ISO_C_BINDING
INTEGER(C_INT), BIND(C,NAME="nVarFromModule") :: intVarModule = -1
REAL(C_DOUBLE), BIND(C,NAME="dVarFromModule") :: dblVarModule = -1.D0
!DEC$ ATTRIBUTES DLLEXPORT :: intVarModule, dblVarModule
END MODULE
在C++中,直接使用变量的新名字引用
extern "C" __declspec(dllimport) int nVarFromModule;
extern "C" __declspec(dllimport) double dVarFromModule;
这一套混编机制本身没有问题。但,在底层的函数中,也会用到MODULE,这时,在编译底层的工程时,就会出现如下的链接警告:
1>LINK : warning LNK4286:符号“dVarFromModule”(在“ModuleCallee.obj”中定义)已由“MixArrayHead.obj”导入
1>LINK : warning LNK4286:符号“dVarFromModule”(在“ModuleCallee.obj”中定义)已由“ExecutiveUnits.obj”导入
1>LINK : warning LNK4286:符号“nVarFromModule”(在“ModuleCallee.obj”中定义)已由“MixArrayHead.obj”导入
1>LINK : warning LNK4286:符号“nVarFromModule”(在“ModuleCallee.obj”中定义)已由“ExecutiveUnits.obj”导入
这玩意儿怎么把它屏蔽掉呀,看着闹心!
|
|