문제

"NoFollow noreferrrer"> 포인트 클라우드 라이브러리 (PCL) visual Studio 2013의 소스에서 v120 물론 도구 세트 및 MSCL18) VS2013 프로젝트에 대해이 라이브러리가 필요하기 때문입니다. 그러나 그것은 까다로운 작업을 밝혀 냈습니다.

  • 한 손에 PCL 소스는 브레이크로 인해 VS2013에서 컴파일되지 않습니다. VS2013의 새로운 C ++ 표준 템플릿 변경
  • VS2012에서 컴파일 될 때, PCL DLL은 자신의 CRT와 가장 단순한 PCL 관련 코드 충돌

예를 들어, VS2013 에서이 코드 스 니펫 :

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

"은 ((((_ FILEX *) PF) -> 로크)) EnterCriticalSection;"에 예외를 발생 이 질문이 있습니다.

마지막 리조트로서 MSCL18에서 MSCL17로 C ++ Frontend를 변경하려고하면 오브젝트 또는 어셈블러 파일을 수신하고 CL18 링커가있는 추가 빌드 단계에 연결할 수 있습니다. 나는 아직 할 수있는 좋은 방법을 찾지 못했습니다.

그래서 내 질문은 누군가가 2 단계 컴파일에 대한 경험을 공유 할 수있는 것, 이전 컴파일러 버전 프론트 엔드를 대체하는 방법 또는이 문제에서 다른 해결책이 될 수있는 방법은 무엇입니까?

도움이 되었습니까?

해결책

라이브러리 소스 코드를 변경하지 않고이 제 3 자 라이브러리를 컴파일하는 몇 가지 방법을 시도했습니다. OK를 사용하는 것으로 밝혀졌습니다. vs2013, vs2013을 통과하지 않는 일부 파일에 대해 VS2013 C ++ 프론트 엔드 (툴 세트 v120, mscl18, mscl17)를 대체했는데 이후를 사용하여 결과적으로 obj 파일은 VS2013에서 추가 컴파일입니다.

James McNellis의 발언은 VS2013 STL 스트림 및 문자열 객체에서 컴파일 오류를 더 잘 이해하고 신중하게 고정시키고 VS2012 네이티브 툴 세트로 잘 컴파일 된 VS2013 STL의 내 서브 세트로 나옵니다.

실제로 다른 구성 및 플랫폼에 대한 사용자 지정 빌드 도구 (C ++ 프로젝트 -> 속성)를 만들었습니다.

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"
.

다음과 같은 출력이 있습니다.

$(IntDir)%(Filename).obj
.

i 도구 가이 사용자 정의 빌드 도구 (C ++ 파일 -> 속성 -> 일반 -> 항목 유형 -> 사용자 정의 빌드 빌드 도구)로 변경되었으며 전체 컴파일 프로세스와 잘 어울리지 않았습니다. 문자열 개체 바이너리 표현은 동일하게 보였고, 결과적인 이진 DLL은 문제가 없으며 모든 시스템이 모든 QA 테스트를 통과 한 모든 시스템을 동일하게 해결했습니다. 이 작은 해킹은 우리가 모든 시스템을 도서관에있는 몇 개의 파일로 인해 지연된 VS2013으로 모든 시스템을 이동시키는 데 도움이되었습니다.

3 월 30 일 업데이트 : 우리는 여러 개월 및 테스트 박스에서 몇 달 동안이 접근법에 대한 오류가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top