带有发布配置的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

下一篇: using localStorage to store numbers