出于某种原因,当使用发布配置构建时,我收到一些关于“非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<: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
{
...
在我看来,明显的是我没有使用CRT的DLL版本,但是由于我是(“多线程DLL(/MD)”的发行版),这不可能是问题所在,所以必须在其他地方……
mysqlpp_export定义为“uu 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