由于某种原因,我在使用释放配置构建时会收到有关“非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
有帮助吗?

解决方案

对我来说,显而易见的是我没有使用CRT的DLL版本,但是由于我(“多线程DLL(/MD)”以要发布)这不能成为问题,因此必须在其他地方...

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

类'std :: _ Container_base_aux'用作DLL-Interface类的基础'std :: _ container_base_aux_aloc_aloc_real <_Alloc>'

这是一个警告,我们在处理跨dll边界发送STL的代码时,将其与C4251一起安全地忽略。警告是让您知道,如果其他DLL是使用其他某些STL版本构建的(它无法弄清楚),那么类的足迹将在类的导入/导出版本之间有所不同。

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

如果您是从标准C ++库中的类型派生,编译调试版本(/MTD)以及编译器错误消息是指_container_base,则可以在Microsoft Visual C ++ 2005中忽略C4275。

注意“调试版本”和_container_base的引用

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top