penultimate 发表于 2021-1-13 12:56:02

MODULE中导出变量时的链接警告怎么屏蔽掉呀!Studio 2019+IVF2019

本帖最后由 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”导入


这玩意儿怎么把它屏蔽掉呀,看着闹心!

penultimate 发表于 2021-1-15 16:02:13

问题解决,自问自答,与君共勉。
在属性页:Linker->Command Line->Additional Options 编辑框内中手工加上:/IGNORE:4286

fcode 发表于 2021-1-15 22:41:34

这,是掩耳盗铃~~:-lol

penultimate 发表于 2021-1-15 22:52:18

确实有点儿那个意思:-D
页: [1]
查看完整版本: MODULE中导出变量时的链接警告怎么屏蔽掉呀!Studio 2019+IVF2019