2

次のコードは、質問 398069 に対する回答からのものです。これは、Linux と最適モードの Windows で非常にうまく機能します。残念ながら、私のアプリは Windows でクラッシュし、デバッグする必要があります...

template <class T>
T *set_the_global(T *candidate)
{
std::map<std::string,void*>::iterator r = MainFactoriesMap::mainFactoriesMap().find(std::string(typeid(*candidate).name()));
...
}

デバッグ モード (Windows、qtcreator、cmake 2.8.2、Visual C++ 10、Qt および boost はデバッグではなくデバッグとして使用可能) で、main に入る前に発生する typeid の呼び出しがクラッシュし、例外がスローされるようです。/GR オプションの使用を強制しました。違いはありません...

デバッグ モードと出力モードでのコンパイラとリンカーへの呼び出しを下に置きます。Visual Studio ですべてをコンパイルしようとしたが、失敗したことに注意してください (ただし、これは別の質問になります)。

最適なビルド: 動作します

c:\PROGRA~2\MICROS~2.0\VC\bin\amd64\cl.exe    /Zc:wchar_t- /EHsc /GR /MD /O2 /Ob2 /D NDEBUG -IE:\Projets\Amose\Sources\lima_common\src -IC:\Qt\v4.8.2\include -IC:\Qt\v4.8.2\include\QtXml -IC:\Qt\v4.8.2\include\QtCore -IC:\PROGRA~1\boost\BOOST_~1\include -Ic:\amose\include    -D DEBUG_CD -D WIN32 -D QT_NO_KEYWORDS -Dlima_common_factory_EXPORTS -DQT_DLL -DQT_XML_LIB -DQT_CORE_LIB -DBOOST_ALL_DYN_LINK -DLIMA_FACTORY_EXPORTING -DQT_NO_DEBUG /TP /FoCMakeFiles\lima-common-factory.dir\AmosePluginsManager.cpp.obj /FdC:\amose-vcbuild\lima-common\src\common\AbstractFactoryPattern\lima-common-factory.pdb -c E:\Projets\Amose\Sources\lima_common\src\common\AbstractFactoryPattern\AmosePluginsManager.cpp

...
"C:\Program Files (x86)\CMake 2.8\bin\cmake.exe" -E vs_link_dll c:\PROGRA~2\MICROS~2.0\VC\bin\amd64\link.exe @CMakeFiles\lima- common-factory.dir\objects1.rsp /out:lima-common-factory.dll /implib:lima-common-factory.lib /pdb:C:\amose-vcbuild\lima-common\src\common\AbstractFactoryPattern\lima -common-factory.pdb /dll /version:0.0 /STACK:10000000 /machine:x64 /INCREMENTAL:NO -LIBPATH:C:\PROGRA~1\boost\BOOST_~1\lib -LIBPATH:c:\amose\lib ..\QsLog\lima-common-qslog.lib ..\misc\lima-common-misc.lib ..\Data\lima-common-data.lib ..\QsLog\lima-common-qslog.lib C: \Qt\v4.8.2\lib\QtXml4.lib C:\Qt\v4.8.2\lib\QtCore4.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib

デバッグ ビルド: 失敗します

c:\PROGRA~2\MICROS~2.0\VC\bin\amd64\cl.exe    /Zc:wchar_t- /EHsc /GR /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1 -IE:\Projets\Amose\Sources\lima_common\src -IC:\Qt\v4.8.2\include -IC:\Qt\v4.8.2\include\QtXml -IC:\Qt\v4.8.2\include\QtCore -IC:\PROGRA~1\boost\BOOST_~1\include -Ic:\amose-debug\include    -D DEBUG_CD -D WIN32 -D QT_NO_KEYWORDS -Dlima_common_factory_EXPORTS -DQT_DLL -DQT_XML_LIB -DQT_CORE_LIB -DBOOST_ALL_DYN_LINK -DLIMA_FACTORY_EXPORTING -DQT_DEBUG /TP /FoCMakeFiles\lima-common-factory.dir\AmosePluginsManager.cpp.obj /FdC:\amose-vcbuild\lima-common-debug\src\common\AbstractFactoryPattern\lima-common-factoryd.pdb -c E:\Projets\Amose\Sources\lima_common\src\common\AbstractFactoryPattern\AmosePluginsManager.cpp

...
"C:\Program Files (x86)\CMake 2.8\bin\cmake.exe" -E vs_link_dll c:\PROGRA~2\MICROS~2.0\VC\bin\amd64\link.exe @CMakeFiles\lima- common-factory.dir\objects1.rsp /out:lima-common-factoryd.dll /implib:lima-common-factoryd.lib /pdb:C:\amose-vcbuild\lima-common-debug\src\common\AbstractFactoryPattern \lima-common-factoryd.pdb /dll /version:0.0 /STACK:10000000 /machine:x64 /debug /INCREMENTAL -LIBPATH:C:\PROGRA~1\boost\BOOST_~1\lib -LIBPATH:c:\amose -debug\lib ..\QsLog\lima-common-qslogd.lib ..\misc\lima-common-miscd.lib ..\Data\lima-common-datad.lib ..\QsLog\lima-common-qslogd .lib C:\Qt\v4.8.2\lib\QtXmld4.lib C:\Qt\v4.8.2\lib\QtCored4.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.ライブラリ uuid.lib comdlg32.lib advapi32.lib

qtcreator を使用したデバッグ セッションの表示:

4

0 に答える 0