pcl은 잘 깔렸다. 그런데, 빌드가 되질 않는다.
분명 경로도 잘 설정해주고, 실제로 파일이 있는 위치와 비교도 했다. 그런데 왜 안될까?
그럼 잘 안되게 설정한 것 이라고 생각했다. 컴퓨터는 거짓말을 못한다. 안시킨 것도 알아서 하는 경우는 정말 감사하지만, 안그럴때가 많다. '시킨 것'만 한다. 그러니 제대로 안시킨 것이 이유일 확률이 높다고 생각한다.
A. cannot open input file 'realsense2.lib'
0. 잘 시켰나 검증하기
위 오류는 링커(비주얼 스튜디오)가 속성(Property Sheet)에서 링크할 때 참고하라고 알려준 목록(Addictional Library Directories)대로 실제 주소를 찾아갔지만, 파일(Additional Dependencies)을 찾지 못할때 띄우는 에러다.
1. 라이브러리 파일이 실제 주소에 그냥 없는 경우
2. 경로가 잘못된(오타, 각자의 컴퓨터마다 세부적으로 다른..) 경우
3. 여러개의 속성(환경 설정)에서 상속받아 하나의 속성으로 통합하는 과정에서 에러가 났을 경우이다.
1의 경우는 배포해주는 측의 문제로, 내가 있을법하다 싶어서 추측해서 넣은 상황이다. 어떻게 해결하는지도 모른다. 알아서 넣어주던지..
2의 경우는 비주얼 스튜디오의 속성창에서 각종 변수(Macro라는 버튼)을 일일이 확인해보면서 실제 내 컴퓨터 디렉토리와 비교해보면 원인을 찾을 수 있다.
나의 경우, 잘못된 파일 경로를 설정 변수(Macro)에 입력해준 것이 첫번째 문제였다. 해결책은 앞선 포스트에 있다 (두 가지 프로젝트의 라이브러리를 참고하는 과정(Intel RealSense SDK2.0, PCL)에서 첫번째 프로젝트를 빌드하다가 이 문제를 해결한 적이 있다.)
3의 경우는 감지하기 어려운 문제였다. 이런 종류의 오류는 코드나, 설정에 내가 입력해준 경로의 문제가 아니라, 순전히 컴파일러를 다루는데에 경험이 부족해서 생긴 문제였다. 프로젝트 속성에 상속을 해주는 선행 속성들이 그 우선순위에 따라서 뒤에 속성에서 상속해주는 링크 경로를 다 날려버리는 경우가 있는걸 발견했다. 그러니, 부모 속성의 순서를 바꿔주면 해결되는 경우가 있다.
예를 들어, PCL_Release_x64라는 부모(선행) 속성이 위에 있을때, 아래 opencv나 intel.realsense에 있는 수십개의 링크 경로(Additional Library Directories)를 다 무시해버리고 프로젝트 속성에 자신만 상속되도록 하는 상황이었던 것이다.
0. 프로젝트 속성 보는 법(속성 구분)
내가 아는 건 두 가지이다. 프로젝트 속성은 컴파일러 혹은 링커가 실제로 작동하는 근거가 되는 속성으로 나는 생각하고 있다. 또한 프로젝트 속성은 우측 Property Manager에 내가 직접 넣어놓은 부모 속성들의 설정 값들을 다 받아온다.
프로젝트 속성을 보는 첫번째 방법은 디버거 화살표 옆에 목록을 펼치는 작은 화살표를 누르고 나오는 목록 맨 아래에 <프로젝트 이름> Debug Properties를 누르면 된다. 두번째 방법은 우측 Property Manager 창에서 가장 위에 프로젝트 디렉토리를 선택하고 그 위에 렌치를 클릭하면 프로젝트 속성창이 뜬다.
여기서 각종 경로(include directories, Additional Library Directories, Additional Dependencies)를 확인해 내가 부모 속성들에 넣어놓은 값들이 잘 들어와 있는지 확인한다.
앞서 opencv 속성이나 intel.realsense에서 추가해준 라이브러리 경로가 하나도 들어가있지 않은 걸 확인할 수 있다. 문제 상황을 확인했으니, 왜 빠지게 되었는지 원인은 모르더라도 해결은 할 수 있다. 부모 속성의 순서를 바꿔주자.
B. OpenNI2.dll이 없어 코드 실행을 진행할 수 없습니다. 프로그램을 다시 설치하면 이 문제가 해결될 수 있습니다.
결국 컴파일러 및 링커가 opencv_highgui341.lib를 찾았다. 하지만 이번엔 OpenNI2.dll가 없다는 에러다.
1. 진짜로 있긴 한가?
2. 제대로 된 곳에 가서 찾고 있는가?