带有发布配置的MySQL ++编译器警告
出于某种原因,当使用发布配置构建时,我收到了一些有关“非dll-interface类”的警告,但未进行调试。
我比较了发布和调试配置,以及我的例子与MySQL ++的例子,但是我不知道哪些设置导致了这些警告。
1>c:sqlmysql 5.0mysql++-3.0.9libqparms.h(49) : warning C4275: non dll-interface class 'std::_Container_base_aux' used as base for dll-interface class 'std::_Container_base_aux_alloc_real<_Alloc>'
1> with
1> [
1> _Alloc=std::allocator<mysqlpp::SQLTypeAdapter>
1> ]
1> C:appsMicrosoft Visual Studio 9.0VCincludexutility(377) : see declaration of 'std::_Container_base_aux'
1>c:sqlmysql 5.0mysql++-3.0.9libresult.h(212) : warning C4275...
来自警告的代码片段:
class MYSQLPP_EXPORT SQLQueryParms : public std::vector<SQLTypeAdapter>
{
...
对我来说显而易见的事情似乎是,我没有使用CRT的dll版本,但是因为我(“多线程DLL(/ MD)”发布),这不能成为问题,所以必须在其他地方...
MYSQLPP_EXPORT被定义为“__declspec(dllexport)”
在编译器命令行中,为了便于阅读,我制作了一些缩短的路径,但所有标志等都是相同的。
/O2 /Oi /GL /I "C:SQLMySQL 5.0include" /I "C:SQLMySQL 5.0mysql++-3.0.9lib" /D "NDEBUG" /D "_WIN32" /D "_MBCS" /FD /EHsc /MD /Gy /Yu"precompiled.h" /Fp"C:...server.pch" /Fo"C:..." /Fd"C:...vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt
和一个MySQL ++的例子。
/Od /I "C:SQLMySQL 5.0include" /I "..lib" /D "_CONSOLE" /D "UNICODE" /D "_UNICODE" /FD /EHsc /MD /Fo"C:SQLMySQL 5.0mysql++-3.0.9vc2008Releasesimple1" /Fd"C:SQLMySQL 5.0mysql++-3.0.9vc2008Releasesimple1.pdb" /W3 /nologo /c /TP /errorReport:prompt
对我来说显而易见的事情似乎是,我没有使用CRT的dll版本,但是因为我(“多线程DLL(/ MD)”发布),这不能成为问题,所以必须在其他地方...
1>c:sqlmysql 5.0mysql++-3.0.9libqparms.h(49) : warning C4275: non dll-interface
class'std :: _ Container_base_aux'用作dll接口类的基础std :: _ Container_base_aux_alloc_real <_Alloc>'
这是一个警告,我们在处理跨越DLL边界发送STL的代码时会与C4251一起安全地忽略它。 这个警告让你知道,如果其他的dll是用其他一些STL版本构建的(它不能算出来),那么这个类的导入/导出版本之间的差异将会有所不同。
我知道你使用的是VS 2008,但MSDN似乎暗示对于2005,你的确切情况可以被安全地忽略:
如果您从标准C ++库中的类型派生,编译调试版本(/ MTd)以及编译器错误消息引用_Container_base,则可以在Microsoft Visual C ++ 2005中忽略C4275。
注意对“调试版本”和_Container_base的引用
链接地址: http://www.djcxy.com/p/27951.html上一篇: Compiler warnings with MySQL++ with release configuration