带有MySQL ++和发布配置的编译器警告

时间:2009-11-02 19:19:52

标签: c++ mysql visual-studio-2008 visual-c++ mysql++

出于某种原因,我在使用发布配置进行构建时会收到一些关于“非dll接口类”的警告,但不会进行调试。

我比较了发布和调试配置,以及MySQL ++示例配置,但是我无法看到哪个设置导致了这些警告。

1>c:\sql\mysql 5.0\mysql++-3.0.9\lib\qparms.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:\apps\Microsoft Visual Studio 9.0\VC\include\xutility(377) : see declaration of 'std::_Container_base_aux'
1>c:\sql\mysql 5.0\mysql++-3.0.9\lib\result.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:\SQL\MySQL 5.0\\include\\" /I "C:\SQL\MySQL 5.0\mysql++-3.0.9\\lib\\" /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:\SQL\MySQL 5.0\\include" /I "..\lib" /D "_CONSOLE" /D "UNICODE" /D "_UNICODE" /FD /EHsc /MD /Fo"C:\SQL\MySQL 5.0\mysql++-3.0.9\vc2008\Release\simple1\\" /Fd"C:\SQL\MySQL 5.0\mysql++-3.0.9\vc2008\Release\simple1.pdb" /W3 /nologo /c /TP /errorReport:prompt

1 个答案:

答案 0 :(得分:2)

  

对我而言,显而易见的事情似乎是   我没有使用dll版本的   CRT,但是因为我   (“多线程DLL(/ MD)”for   释放)这不能成为问题,所以   必须在别的地方......

1>c:\sql\mysql 5.0\mysql++-3.0.9\lib\qparms.h(49) : warning C4275: non dll-interface  
     

使用了类'std :: _ Container_base_aux'   作为dll接口类的基础   '的std :: _ Container_base_aux_alloc_real&LT; _Alloc&GT;'

当处理跨越DLL边界发送STL的代码时,这是一个警告我们与C4251一起安全地忽略。警告让你知道,如果另一个dll是用其他STL版本构建的(它无法解决),那么类的占用空间将在类的导入/导出版本之间有所不同。 / p>

我知道你正在使用VS 2008,但是MSDN似乎暗示在2005年你可以安全地忽略你的确切情况:

  

在Microsoft中可以忽略C4275   Visual C ++ 2005如果要派生的话   来自标准C ++中的类型   库,编译调试版   (/ MTd)和编译器错误的地方   message引用_Container_base。

请注意对“debug release”和_Container_base

的引用