반응형



라즈베리파이를 위해 이클립스에서 OpenCV 예제 크로스 컴파일을 하는 방법을 소개합니다.



마지막 업데이트 2019. 5.  3



1. 이클립스 설치


IDE로는 Eclipse를 다운로드 받아서 사용했습니다.

      https://www.eclipse.org/downloads/packages/




다운로드 받아서 적절한 곳에 압축을 풀어주기만 하면 사용준비가 완료됩니다.




2. Windows toolchain for Raspberry/PI


윈도우가 설치된  PC에서 사용할 크로스 컴파일러를 설치합니다.



2-1. http://gnutoolchains.com/raspberry/ 에서 사용중인 라즈비안 버전에 따라 알맞는 툴체인을 다운로드 받습니다.  


여기서는 라즈비안 최신 버전인 stretch를 기준으로 합니다.

첫번째 줄에 있는 raspberry-gcc6.3.0-r4.exe를 다운로드 받습니다.





2-2. 다운로드 받은 파일을 실행하여 설치를 진행합니다.





2-3. 컴퓨터에 있는 헤더파일과 라이브러리 버전이 라즈베리파이에 있는 것이 동일해지도록 동기화를 해줘야 합니다.


라즈베리파이로부터 파일들을 복사해오는 방식으로 진행됩니다.

처음 진행한 이후에도 라즈베리파이에 새로운 라이브러리를 설치했다면 이 작업을 꼭 다시 해줘야 합니다.


C:\SysGCC\raspberry\TOOLS 디렉토리 내에 있는 UpdateSysroot.bat를 실행시킵니다.



Select 버튼을 클릭합니다.





2-4. Setup a new connection을 더블 클릭합니다.





2-5. Host name에 라즈베리파이가 할당받은 아이피 주소를 적고 User name에 pi, Password에 pi의 패스워드를 적습니다.

Connect 버튼을 클릭하면 접속 가능여부를 체크합니다.





2-6. Save 버튼을 클릭합니다.





2-7. 접속에 문제가 없었다면 상단 입력란에 라즈베리파이의 주소가 보입니다. 동기화를 시작하려면 Synchronize 버튼을 클릭합니다.

추가로 가져올 디렉토리가 있다면 파란색으로 표시한 창에 적어줍니다.





2-8. 라즈베리파이로부터 C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot으로 위에서 설정한 5개 폴더의 하위 폴더 및 파일들이 모두 복사되어 집니다





중간에 다음과 같은 에러가 나지만 중단하지 않고 놔두면 계속 진행이 됩니다.


tar: cups/backend/vnc: Cannot open: Permission denied

tar: Exiting with failure status due to previous errors




지정되어 있는 5개의 폴더가 모두 완료되어야 합니다.

실패한 경우 다시 시도해서 완료해야 합니다.





3.이클립스 설정하기


3-1. 메뉴에서   Help > Install New Software 를 선택합니다.




3-2. Work with 콤보박스에서 --All Available Sites--를 선택합니다.





3-3. Mobile and Device Development 하위 항목에 있는 모든 항목을 체크한 후, Next를 클릭하여 설치를 진행합니다.





3-4. 완료 후,  보이는 창에서 설정을 적용하기 위해서 Restart Now 버튼을 클릭합니다.





4. 예제 프로젝트 컴파일


4-1. 메뉴에서 File > New > C++ Project를 선택합니다.




4-2. 프로젝트 목록에서 C++ Managed Build를 선택합니다.





4-3. Project name을 적고 Project type은 Empty Project, Toolchains는 Cross GCC를 선택합니다.





4-4. Next를 클릭합니다.





4-5. Cross compiler prefix에  arm-linux-gnueabihf-를 입력합니다.

Cross compiler path에는 C:\SysGCC\raspberry\bin를 입력합니다.





4-6. 왼쪽에 있는 프로젝트 이름에서 마우스 우클릭하여 메뉴에서 New > Source File을 선택합니다.

Source file에 소스코드 파일 이름을 적어주고 Finish를 클릭합니다.





프로젝트 탐색기에 main.cpp가 추가되었습니다.





4-7. main.cpp 파일에 다음 코드를 붙여넣기하고 Ctrl+S를 입력하여 저장합니다.



#include <opencv2/opencv.hpp>
#include <iostream>


using namespace cv;
using namespace std;


int main()
{
Mat image;
image = imread("house.jpg", IMREAD_COLOR);
if (image.empty())
{
cout << "Could not open or find the image" << endl;
return -1;
}

namedWindow("Original", WINDOW_AUTOSIZE);
imshow("Original", image);

waitKey(0);

}




4-8. 메뉴에서 Project > Properties를 선택합니다.



왼쪽 메뉴에서 C/C++ Build > Settings를 선택합니다.





4-9. Cross G++ Compiler > Includes에 다음 경로를 추가합니다.  

초록색 + 아이콘을 선택하여 추가하면 됩니다.

사용할 헤더파일의 위치입니다.


C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\include

C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\include

C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\include\opencv4





4-10. Cross G++ Linker > Libraries를 선택합니다.

초록색 + 아이콘을 선택하여 추가하면 됩니다.

사용할 라이브러리의 위치와 사용할 라이브러리 이름을 지정해줍니다.


Libraries에  사용할 라이브러리 이름을 아래 화면처럼 한줄에 하나씩 입력합니다.


Library search path에 해당 라이브러리를 찾을 위치를 다음처럼 입력해줍니다.

C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib

C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\lib

C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\lib


Libraries에 사용할 라이브러리 이름을 추가합니다. OpenCV를 사용한 코드를  컴파일하기 위해 필요합니다.

여기에서는 최소한의 라이브러리만 추가했습니다.(굵은 글씨)


opencv_gapi

opencv_stitching

opencv_aruco

opencv_bgsegm

opencv_bioinspired

opencv_ccalib

opencv_dnn_objdetect

opencv_dpm

opencv_face

opencv_freetype

opencv_fuzzy

opencv_hfs

opencv_img_hash

opencv_line_descriptor

opencv_quality

opencv_reg

opencv_rgbd

opencv_saliency

opencv_stereo

opencv_structured_light

opencv_phase_unwrapping

opencv_superres

opencv_optflow

opencv_surface_matching

opencv_tracking

opencv_datasets

opencv_text

opencv_dnn

opencv_plot

opencv_videostab

opencv_video

opencv_xfeatures2d

opencv_shape

opencv_ml

opencv_ximgproc

opencv_xobjdetect

opencv_objdetect

opencv_calib3d

opencv_features2d

opencv_highgui

opencv_videoio

opencv_imgcodecs

opencv_flann

opencv_xphoto

opencv_photo

opencv_imgproc

opencv_core





4-11. Apply and Close를 클릭하면 보이는 창에서 Yes를 선택합니다.





문제 없으면 코드에 보이던 에러가 모두 사라집니다.





4-12. 메뉴에서 Project > Build All을 선택합니다.

문제 없다면 다음과 같은 메시지를 볼 수 있습니다.


23:39:20 **** Build of configuration Debug for project HelloWrold ****

make all

'Building file: ../main.cpp'

'Invoking: Cross G++ Compiler'

arm-linux-gnueabihf-g++ -I"D:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\include" -I"D:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\include" -I"D:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\include\opencv4" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.o" -o "main.o" "../main.cpp"

'Finished building: ../main.cpp'

' '

'Building target: HelloWrold'

'Invoking: Cross G++ Linker'

arm-linux-gnueabihf-g++ -L"D:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib" -L"D:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\lib" -L"D:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\lib" -o "HelloWrold"  ./main.o -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

'Finished building target: HelloWrold'

' '


23:39:28 Build Finished. 0 errors, 0 warnings. (took 7s.638ms)




4-13. 실행파일과 이미지 파일을 옮겨주고 실행해봅니다. 실행파일은 다음 위치에 있습니다.

C:\Users\webnautes\eclipse-workspace\HelloWrold\Debug




MobaXterm을 사용하면 드래그앤 드롭으로 라즈베리파이로 파일을 복사할 수 있습니다.





4-14. 실행 퍼미션을 추가 후, 실행합니다.





MobaXterm에서 실행하면 결과를 별도의 창에 보여줍니다.





이후 추가적으로 라즈베리파이에 라이브러리를 설치했다면  UpdateSysroot.bat 를 실행시켜주어야 합니다.

그래야 컴퓨터 쪽으로 해당 라이브러리와 헤더파일을 가져와서  크로스 컴파일러도 동일한 환경에서 컴파일을 진행할 수 있게 됩니다.




5. 참고

http://gnutoolchains.com/raspberry/tutorial/


http://www.gurucoding.com/en/raspberry_pi_eclipse/raspberry_pi_cross_compilation_in_eclipse.php




반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts