pcl library setting in vs2019

0

window dev

목록 보기
5/5

상황

ply file 을 읽어서 보여줄수 있는 툴이 필요하다.

  • 구체적으로는 pcl 라이브러리를 사용
  • ply 를 읽어 3d cloud 를 출력해주는 테스트 프로그램을 작성하려고 한다.

pcl 라이브러리 환경을 visual studio 2019 에 구성한다.

  • SDL 구성
  • FooDlg.cpp 의 버튼 핸들러에 테스트 코드를 넣는 구조로 작성할 생각

발생한 gotcha 2가지

1) 빌드 설정을 할때 빌드타입과 아키텍쳐 정보에 주의

2) cloud_viewer.h 인클루드 하기 전에 opencv.hpp 인클루드 필요

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
  • 이 코드 위에서 cloud_viewer.h 를 인클루드 할때는 이렇게 해야 한다.
#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 으로 세팅 진행

pcl 라이브러리 세팅 스탭

1) PCL-1.13.1-rc1-AllInOne-msvc2022-win64.exe 실행

  • C:\Program Files\PCL 1.13.0-rc1 에 기본적으로 생성

2) C:\Program Files\PCL 1.13.0-rc1\3rdParty\OpenNI2\OpenNI-Windows-x64-2.2.exe 실행

  • C:\Program Files\OpenNI2 에 기본적으로 생성, 생성된 파일들을 복사해서 옮겨온다

3) C/C++ --> General --> Additional include Directories 등록

빌드할때 .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

링크 에러 나는걸 확인

  • LNK2019
  • LNK1120

4) Linker --> General --> Additional Library Directories 등록

링크할때 .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

5) Linker --> Input --> Additional Dependencies 등록

링크할 .lib

C:\Program Files\PCL 1.13.0-rc1 에서
find . -name "*.lib" -printf "%f\n"
로 찾은 모든 라이브러리 (MWClosestPoint.lib, glut32.lib, glut64.lib 는 제외)

실행시 dll 런타임 에러 나는걸 확인

6) Debugging --> Environment 에 PATH 변수 등록

실행할때 .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%
profile
관심분야 : Filesystem, Data structure, user/kernel IPC

2개의 댓글

comment-user-thumbnail
약 10시간 전

pcl::io::loadPLYFile<pcl::PointXYZ> 함수 호출시 std::bad_alloc 런타임 에러가 지속적으로 발생하고 있다.

ubuntu24 cmake 환경에서 동일 함수를 호출했을땐, 문제가 없었다.
ply 파일포맷의 문제도 아니고 메모리를 잘못넘긴것도 아니다.

pcl::PointCloud<pcl::PointXYZ> cloud;
if (pcl::io::loadPLYFile<pcl::PointXYZ>("test_ply.ply", cloud) < 0) {  // vs2019 : error, ubuntu24 : ok

--> vs2019 대신 ubuntu qt 쪽에서 작업하는걸로 선회

답글 달기
comment-user-thumbnail
약 10시간 전

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)
답글 달기

관련 채용 정보