Pregunta

Estoy tratando de compilar The Point Cloud Library (PCL) de las fuentes en Visual Studio 2013 (con V120 Places de herramientas y MSCL18, por supuesto, porque necesito esta biblioteca para un proyecto VS2013. Sin embargo, resultó una tarea difícil.

  • en una mano, las fuentes de PCL no están compiladas en VS2013 debido a la ruptura Cambios en las nuevas plantillas estándar de C ++ en VS2013
  • Por otro lado, cuando se compila en VS2012, las DLL de PCL tienen su propia CRT e incluso los bloqueos de código relacionados con PCL más simples

Por ejemplo, en VS2013 este código SNIPPET:

pcl::console::print_highlight(stdout, "Begin");

lanza una excepción en "EntercriticalSection (& (((_ FILEX *) PF) -> Bloquear));", que se describe en esta pregunta , debido a diferentes CRT en DLLs PCL y mi EXE.

Como último recurso, estoy tratando de cambiar C ++ Frontend desde MSCL18 a MSCL17 para recibir archivos de objeto o ensamblador y víncenos en el paso de compilación adicional con el enlazador CL18. No encontré una buena manera de hacerlo todavía.

¿Entonces mi pregunta es si alguien puede compartir su experiencia en una compilación de dos pasos, cómo sustituir la versión anterior del compilador anterior o cuál puede ser otra solución en este problema?

¿Fue útil?

Solución

Intenté algunos enfoques para compilar esta biblioteca de terceros sin cambiar el código fuente de la biblioteca. El que resultó funcionar para funcionar bien, estaba sustituyendo el frente VS2013 C ++ (conjunto de herramientas V120, MSCL18) con el anterior (vs2012, conjunto de herramientas V110, MSCL17) para algunos archivos, que no pasan por VS2013, y luego se usa Resultando archivos obj en una compilación adicional en VS2013.

Los comentarios de James McNellis hicieron un gran trabajo, ya que me ayudaron a comprender mejor y reparar cuidadosamente los errores de compilación en los objetos de STL de VS2013 STL y saldrán con mi subconjunto de STL vs2013 que compilaron multa con el conjunto de herramientas nativas VS2012.

En realidad, creé una herramienta de construcción personalizada (proyecto C ++ -> Propiedades) para diferentes configuraciones y plataformas:

Debug|Win32
$(ComSpec) /c ""$(ProgramFiles)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat" x86   && cl.exe /c %(FullPath) /IC:\Src\PCLCompilation\local_stl /IC:/Src/PCLCompilation/boost_1_55_0 /IC:/Src/PCLCompilation/eigen/include /I"C:/Src/PCLCompilation/flann-1.8.4.v120/include" /I"$(SolutionDir)include" /I"C:/Src/PCLCompilation/pcl-master/common/include" /I"C:/Src/PCLCompilation/pcl-master/octree/include" /I"C:/Src/PCLCompilation/pcl-master/io/include" /I"C:/Src/PCLCompilation/pcl-master/filters/include" /nologo /W3 /WX- /MP4 /Od /Ob0 /Oy- /Zi /D_MSC_VER=1800 /D WIN32 /D _WINDOWS /D _WINDLL /D _MBCS /D _DEBUG /D BOOST_DISABLE_ASSERTS /D EIGEN_NO_DEBUG /D BOOST_ALL_NO_LIB /D _SCL_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_WARNINGS /D NOMINMAX /D BOOST_LIB_DIAGNOSTIC /D EIGEN_USE_NEW_STDVECTOR /D EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET /D FLANN_STATIC /D CMAKE_INTDIR=$(Configuration) /D PCLAPI_EXPORTS /Gm- /EHsc /RTC1 /MDd /GS /arch:SSE2 /fp:precise /Zc:wchar_t /Zc:forScope /GR /openmp /Fo"$(IntDir)\" /Fd"$(TargetDir)$(TargetName).pdb" /Gd /TP /wd4800 /wd4521 /wd4251 /wd4275 /wd4305 /wd4355 /wd4800 /wd4521 /wd4251 /wd4275 /wd4305 /wd4355 /analyze- /errorReport:prompt /bigobj"
Debug|x64
$(ComSpec) /c ""$(ProgramFiles)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64           && cl.exe /c %(FullPath) /IC:\Src\PCLCompilation\local_stl /IC:/Src/PCLCompilation/boost_1_55_0 /IC:/Src/PCLCompilation/eigen/include /I"C:/Src/PCLCompilation/flann-1.8.4.v120/include" /I"$(SolutionDir)include" /I"C:/Src/PCLCompilation/pcl-master/common/include" /I"C:/Src/PCLCompilation/pcl-master/octree/include" /I"C:/Src/PCLCompilation/pcl-master/io/include" /I"C:/Src/PCLCompilation/pcl-master/filters/include" /nologo /W3 /WX- /MP4 /Od /Ob0      /Zi /D_MSC_VER=1800 /D WIN32 /D _WINDOWS /D _WINDLL /D _MBCS /D _DEBUG /D BOOST_DISABLE_ASSERTS /D EIGEN_NO_DEBUG /D BOOST_ALL_NO_LIB /D _SCL_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_WARNINGS /D NOMINMAX /D BOOST_LIB_DIAGNOSTIC /D EIGEN_USE_NEW_STDVECTOR /D EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET /D FLANN_STATIC /D CMAKE_INTDIR=$(Configuration) /D PCLAPI_EXPORTS /Gm- /EHsc /RTC1 /MDd /GS /arch:SSE2 /fp:precise /Zc:wchar_t /Zc:forScope /GR /openmp /Fo"$(IntDir)\" /Fd"$(TargetDir)$(TargetName).pdb" /Gd /TP /wd4800 /wd4521 /wd4251 /wd4275 /wd4305 /wd4355                                                           /errorReport:prompt /bigobj"

Release|Win32
$(ComSpec) /c ""$(ProgramFiles)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat" x86   && cl.exe /c %(FullPath) /IC:\Src\PCLCompilation\local_stl /IC:/Src/PCLCompilation/boost_1_55_0 /IC:/Src/PCLCompilation/eigen/include /I"C:/Src/PCLCompilation/flann-1.8.4.v120/include" /I"$(SolutionDir)include" /I"C:/Src/PCLCompilation/pcl-master/common/include" /I"C:/Src/PCLCompilation/pcl-master/octree/include" /I"C:/Src/PCLCompilation/pcl-master/io/include" /I"C:/Src/PCLCompilation/pcl-master/filters/include" /nologo /W3 /WX- /MP4 /O2 /Ob2 /Oy- /GL /D_MSC_VER=1800 /D WIN32 /D _WINDOWS /D NDEBUG /D BOOST_DISABLE_ASSERTS /D EIGEN_NO_DEBUG /D BOOST_ALL_NO_LIB /D _SCL_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_WARNINGS /D NOMINMAX /D BOOST_LIB_DIAGNOSTIC /D EIGEN_USE_NEW_STDVECTOR /D EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET /D FLANN_STATIC /D CMAKE_INTDIR=$(Configuration) /D PCLAPI_EXPORTS /D _WINDLL /D _MBCS /Gm- /EHsc /MD /GS /arch:AVX /fp:precise /Zc:wchar_t /Zc:forScope /GR /openmp /Fo"$(IntDir)\" /Fd"$(TargetDir)$(TargetName).pdb" /Gd /TP /wd4800 /wd4521 /wd4251 /wd4275 /wd4305 /wd4355 /analyze- /errorReport:prompt  /bigobj"
Release|x64
$(ComSpec) /c ""$(ProgramFiles)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64           && cl.exe /c %(FullPath) /IC:\Src\PCLCompilation\local_stl /IC:/Src/PCLCompilation/boost_1_55_0 /IC:/Src/PCLCompilation/eigen/include /I"C:/Src/PCLCompilation/flann-1.8.4.v120/include" /I"$(SolutionDir)include" /I"C:/Src/PCLCompilation/pcl-master/common/include" /I"C:/Src/PCLCompilation/pcl-master/octree/include" /I"C:/Src/PCLCompilation/pcl-master/io/include" /I"C:/Src/PCLCompilation/pcl-master/filters/include" /nologo /W3 /WX- /MP4 /O2 /Ob2      /GL /D_MSC_VER=1800 /D WIN32 /D _WINDOWS /D NDEBUG /D BOOST_DISABLE_ASSERTS /D EIGEN_NO_DEBUG /D BOOST_ALL_NO_LIB /D _SCL_SECURE_NO_WARNINGS /D _CRT_SECURE_NO_WARNINGS /D NOMINMAX /D BOOST_LIB_DIAGNOSTIC /D EIGEN_USE_NEW_STDVECTOR /D EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET /D FLANN_STATIC /D CMAKE_INTDIR=$(Configuration) /D PCLAPI_EXPORTS /D _WINDLL /D _MBCS /Gm- /EHsc /MD /GS /arch:AVX /fp:precise /Zc:wchar_t /Zc:forScope /GR /openmp /Fo"$(IntDir)\" /Fd"$(TargetDir)$(TargetName).pdb" /Gd /TP /wd4800 /wd4521 /wd4251 /wd4275 /wd4305 /wd4355 /errorReport:prompt /bigobj"

con las siguientes salidas:

$(IntDir)%(Filename).obj

Cambié la herramienta para archivos no compromisos a esta herramienta de compilación personalizada (archivo C ++ -> Propiedades -> General -> Tipo de artículo -> Herramienta de compilación personalizada) y se dirigió muy bien con todo el proceso de compilación. La representación binaria del objeto de cadena se veía idéntica, las DLL binarias resultantes no trabajaron ningún problema y todo el sistema pasó todas nuestras pruebas de control de calidad. Este pequeño truco nos ayudó a mover todo nuestro sistema a VS2013, que se retrasó debido a algunos archivos en una biblioteca, dependientes de.

30 de marzo Actualización: No encontramos ningún error con este enfoque durante unos pocos meses en varios envíos y cajas de prueba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top