解决 警告 inconsistent dll linkage
这个问题也是在写c++ dll 的过程中遇到的,有空的时候我来补充完整的代码。
终于有时间了,原来还有人遇到这个问题的,我来补充完整.
一、dll中的代码举例如下
如果你建一个项目,没有使用名称MYDLL,将这段代码,复制过去,就会提示 inconsistent dll linkage 警告。作者就是因为这样,才出的问题。
解决方法是:
在 工程--属性--配置属性--c/c++--预处理器--预处理定义, 增加MYDLL_EXPORTS,预定义,问题就可以解决了。(这个问题比较低级,作者是初用c++,所以才出现这种状况)
问题虽然解决了,但道理还不清楚呢.
我来解释一下原因:
PREDLL_API依赖于是否定义了MYDLL_EXPORTS来决定宏展开为__declspec(dllexport)还是__declspec(dllimport)
展开为__declspec(dllexport)是DLL编译时的需要,通知编译器该函数是需要导出供外部调用的。
展开为__declspec(dllimport)是给调用者用的,通知编译器,该函数是个外部导入函数。
对于工程设置里面的预定义宏,是最早被编译器看到的。所以当编译器编译DLL工程中的MYDLL.cpp时,因为看到前面有工程设置有定义MYDLL_EXPORTS,所以就把PREDLL_API展开为__declspec(dllexport)了。
这样做的目的是为了让DLL和调用者共用同一个h文件,在DLL项目中,定义MYDLL_EXPORTS,PREDLL_API就是导出;在调用该DLL的项目中,不定义MYDLL_EXPORTS,PREDLL_API就是导入。
这样就明白了吧!
不知本篇博文对你有没有帮助, 请多多支持!
本文介绍了解决C++ DLL开发过程中遇到的inconsistentdlllinkage警告的方法。通过正确设置预处理器宏MYDLL_EXPORTS,可以确保DLL导出符号与调用者的链接方式一致。文章详细解释了__declspec(dllexport)与__declspec(dllimport)的区别。
1934





