ply file 을 읽어서 보여줄수 있는 툴이 필요하다.
pcl 라이브러리 환경을 visual studio 2019 에 구성한다.
정확한 원리는 모르겠지만, cloud_viewer.h 만 인클루드 했을 경우, pcl 3rdParty 헤더들에서 여러 형태의 type 에러가 발생한다.
추가 조사를 해본 결과 다음 링크에서 해답을 얻을수 있었다.
https://killsia.tistory.com/entry/PCL-error-C2661-pclPointCloudPointToperator-new-no-overloaded-function-takes-3-arguments
기본적으로 FooDlg.cpp 는 아래 코드가 들어간다.
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#undef max
#undef min
#include <pcl/visualization/cloud_viewer.h>
(이 부분에 대한 설명은 chatgpt 에게 물어보았다, windows.h 헤더 이후에 인클루드 되는 헤더에서 std::max, std::min 같은 템플릿 함수를 쓰면 문제가 될수 있어서 쓰는거라고 한다.)
https://chatgpt.com/share/67b69e9c-102c-800b-9cf9-d25cc4dfb883
이 코드 아래에서 cloud_viewer.h 를 인클루드 하려면, #if .. #endif 3줄을 모두 주석처리 해야한다.
(이 부분에 대해선 추가로 확인해보진 않았다.)
추가로 더 조사를 해본 결과 PCL 버전별로 차이가 있는걸 확인
PCL-1.14.1 (250220 현재 latest) : 문제 해결되지 않음
PCL-1.13.0-rc1 : 문제 해결됨
--> PCL-1.13.0-rc1 으로 세팅 진행
빌드할때 .hpp 찾는곳
C:\Program Files\PCL 1.13.0-rc1\3rdParty\OpenNI2\Include
C:\Program Files\PCL 1.13.0-rc1\3rdParty\VTK\include\vtk-9.1
C:\Program Files\PCL 1.13.0-rc1\3rdParty\Qhull\include
C:\Program Files\PCL 1.13.0-rc1\3rdParty\FLANN\include
C:\Program Files\PCL 1.13.0-rc1\3rdParty\Eigen\eigen3
C:\Program Files\PCL 1.13.0-rc1\3rdParty\Boost\include\boost-1_78
C:\Program Files\PCL 1.13.0-rc1\include\pcl-1.12
링크 에러 나는걸 확인
링크할때 .lib 찾는곳
C:\Program Files\PCL 1.13.0-rc1\3rdParty\VTK\lib
C:\Program Files\PCL 1.13.0-rc1\3rdParty\OpenNI2\Lib
C:\Program Files\PCL 1.13.0-rc1\3rdParty\Qhull\lib
C:\Program Files\PCL 1.13.0-rc1\3rdParty\FLANN\lib
C:\Program Files\PCL 1.13.0-rc1\3rdParty\Boost\lib
C:\Program Files\PCL 1.13.0-rc1\lib
링크할 .lib
C:\Program Files\PCL 1.13.0-rc1 에서
find . -name "*.lib" -printf "%f\n"
로 찾은 모든 라이브러리 (MWClosestPoint.lib, glut32.lib, glut64.lib 는 제외)
실행시 dll 런타임 에러 나는걸 확인
실행할때 .dll 찾는곳
C:\Program Files\PCL 1.13.0-rc1 에서
$ find "$(pwd)" -iname "bin"
로 찾은 모든 디렉토리
PATH=C:\Program Files\PCL 1.13.0-rc1\bin;C:\Program Files\PCL 1.13.0-rc1\3rdParty\FLANN\bin;C:\Program Files\PCL 1.13.0-rc1\3rdParty\Qhull\bin;C:\Program Files\PCL 1.13.0-rc1\3rdParty\VTK\bin;C:\Program Files\PCL 1.13.0-rc1\3rdParty\OpenNI2\Samples\Bin;%PATH%
ubuntu24 pcl 환경구성
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(TEST)
find_package(PCL 1.3 REQUIRED)
set(PCL_INCLUDE_DIRS /usr/include/pcl-1.8)
set(PCL_LIBRARY_DIRS /usr/lib/x86_64-linux-gnu)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_executable(test test.cpp)
target_link_libraries(test PUBLIC pcl_io)
add_executable(test2 test2.cpp)
target_link_libraries(test2 PUBLIC pcl_io)
pcl::io::loadPLYFile<pcl::PointXYZ> 함수 호출시 std::bad_alloc 런타임 에러가 지속적으로 발생하고 있다.
ubuntu24 cmake 환경에서 동일 함수를 호출했을땐, 문제가 없었다.
ply 파일포맷의 문제도 아니고 메모리를 잘못넘긴것도 아니다.
--> vs2019 대신 ubuntu qt 쪽에서 작업하는걸로 선회