반응형



라즈베리파이를 위해 이클립스에서 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




반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


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

  1. 변기통속물고기 2018.07.09 08:51

    작년 이맘때쯤 위 방법을 문의했던 사람입니다
    그동안 바빠서 라즈베리파이는 건들지도 못하다가 이제야 글을 보게 되었네요 죄송합니다 ㅜㅜ

    어디에도 없을 값진 글 작성해 주셔서 감사합니다. 너무 좋은 글들이 많아서 앞으로라도 자주 들리며 적어두신 좋은 가르침 받아야지 싶네요
    좋은 하루 되세요! 놜 더운데 건강 잘 챙기시구요

  2. 바꾸고바꾸기 2018.10.11 15:28

    좋은 자료 감사합니다.

    그대로 따라해서 설치까지 끝냈는데, 이렇게 오류가 뜨네요 ㅠㅠ

    make all
    'Building target: OpenCV Test'
    'Invoking: Cross G++ Linker'
    arm-linux-gnueabihf-g++ -L"C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib" -o "OpenCV Test" ./main.o -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_core
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_create(unsigned int&, unsigned int)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::rfind(char, unsigned int) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char, unsigned int) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned int)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `VTT for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::_M_sync(char*, unsigned int, unsigned int)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_assign(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned int, unsigned int, char const*, unsigned int)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::reserve(unsigned int)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream(std::_Ios_Openmode)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_highgui.so: undefined reference to `operator delete(void*, unsigned int)@CXXABI_1.3.9'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::resize(unsigned int, char)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned int)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char const*, unsigned int, unsigned int) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::replace(unsigned int, unsigned int, char const*, unsigned int)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_highgui.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_mutate(unsigned int, unsigned int, wchar_t const*, unsigned int)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgproc.so: undefined reference to `operator delete[](void*, unsigned int)@CXXABI_1.3.9'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_last_not_of(char const*, unsigned int, unsigned int) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `vtable for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `VTT for std::__cxx11::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_aux(unsigned int, unsigned int, unsigned int, char)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::random_device::_M_init(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::runtime_error::runtime_error(char const*)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `vtable for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_erase(unsigned int, unsigned int)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::range_error::range_error(char const*)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct(unsigned int, char)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_istringstream()@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_first_of(char const*, unsigned int, unsigned int) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `VTT for std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `vtable for std::__cxx11::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::range_error::range_error(char const*)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_last_of(char const*, unsigned int, unsigned int) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_highgui.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned int&, unsigned int)@GLIBCXX_3.4.21'
    c:\sysgcc\raspberry\bin\../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_first_not_of(char const*, unsigned int, unsigned int) const@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned int, unsigned int, char const*, unsigned int)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >& std::getline<char, std::char_traits<char>, std::allocator<char> >(std::basic_istream<char, std::char_traits<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, char)@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_imgcodecs.so: undefined reference to `vtable for std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
    C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib/libopencv_core.so: undefined reference to `std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const@GLIBCXX_3.4.21'
    collect2.exe: error: ld returned 1 exit status
    make: *** [OpenCV Test] Error 1

    undefined reference라는 오류가 뜨고 build가 되질 않네요 ㅠ 왜 그럴까요?

  3. 하늘선 2019.04.05 10:43

    좋은 글 감사합니다.

    현재 우분투 가상환경에서 커널 모듈 크로스 컴파일을 하고 있는데,

    혹시 모듈을 이클립스에서 크로스 컴파일 하는게 가능할까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.04.05 14:21 신고

      검색해봐도 마땅한 방법이 안나오네요.

    • 하늘선 2019.04.05 15:12

      알아봐 주셔서 감사합니다.

      모듈 컴파일은 다들 리눅스 환경에서 하시나봐요 ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.04.05 15:36 신고

      아무래도 개발환경때문에 리눅스에서 할 수 밖에 없는 듯합니다.

  4. doo 2019.04.24 21:23

    와 유튜브에서 보고 여기 블로그까지 오게 되었는데 정말 대단하시다는 말씀밖에 못 드리겠습니다. 한글로 된 강좌 중에서는 최고인것 같습니다! 덧글 자체를 처음 달아보는데 블로그 글들을 공부할수록 정성과 노력에 감탄하게 됩니다. 정말 너무너무 감사합니다!!

  5. doo 2019.04.25 00:36

    현재 2019.04.25 기준으로 내용이 조금 다르지만 인터넷에 검색해 가면서 Build All 지점까지 갔습니다!
    그런데 빌드후에

    00:22:24 **** Build of configuration Debug for project OpenCV TEST ****
    make all
    'Building file: ../main.cpp'
    'Invoking: Cross G++ Compiler'
    arm-linux-gnueabihf-g++ -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: OpenCV TEST'
    'Invoking: Cross G++ Linker'
    arm-linux-gnueabihf-g++ -L"C:\SysGCC\raspberry\arm-linux-gnueabihf\sysroot\usr\local\lib" -o "OpenCV TEST" ./main.o -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs
    c:/sysgcc/raspberry/bin/../arm-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf/crt1.o: In function `_start':
    (.text+0x34): undefined reference to `main'
    collect2.exe: error: ld returned 1 exit status
    make: *** [OpenCV TEST] Error 1
    "make all" terminated with exit code 2. Build might be incomplete.

    00:22:33 Build Failed. 2 errors, 0 warnings. (took 8s.520ms)

    라고 2개의 에러가 뜹니다. 라즈베리파이에 opencv는 설치한 상태이고,
    위에 설명이랑 다르게 한 부분은 "C/C++ GCC Cross Compiler Support"가 다른 상위목록에 있었고 이름이 "C/C++ GCC Cross Compiler Support + ~~~"였습니다..
    '혹시 해결 방법이 있을까요??

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.04.25 23:26 신고

      업데이트 해두었습니다. 검토해보세요..

      OpenCV 설치 위치를 확인할 시간이 없어서.. 간단한 헬로우 월드 출력 예제로 테스트했습니다.

  6. doo 2019.05.02 12:06

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

    라고 되어있는데 사진에는 라이브러리에 아무것도 없습니다. ㅠㅠ
    그리고 저번처럼 간단한 opencv 예제도 같이 해주실순 없나용??
    임의로 예제 하니까 오류가 너무 많이 나옵니다..ㅠㅠ

    그리고 MobaXterm 관련 게시글은 어디있나요?? 블로그 검색을 어디서 해야 될지 모르겠습니다.

    항상 빠르고 좋은 자료 감사합니다!

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.02 12:22 신고

      OpenCV 헤더파일과 라이브러리를 가져오지 않기에 빼버려서 사용하는 라이브러리가 없기 때문입니다^^;;

      시간나는대로 다시 해보겠습니다.

      MobaXterm 간단한 사용방법은 다음 포스트의 5번을 참고하세요

      https://webnautes.tistory.com/899



  7. doo 2019.05.02 14:54

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

    그럼 만약에 위와 같은 library를 사용하는 opencv 예제를 한다고 했을 때, 4-10에서 library에 어떤 식으로 명령어를 입력해야 되나요???

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.02 15:40 신고

      2-3 결과 OpenCV 라이브러리를 가져와야 하는데 예전과 달리 가져오지 못하는 듯합니다.

      그래서 OpenCV 컴파일이 안되는 듯합니다.

      좀더 확인이 필요합니다...

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.04 00:08 신고

      포스트를 업데이트했습니다. 확인해보세요.

  8. doo 2019.05.07 17:35

    감사합니다. 아무 문제 없이 작동합니다!

  9. 2019.05.07 17:41

    비밀댓글입니다

  10. 장수불 2020.03.03 10:32

    제가 윈도우 10 IOT 버전으로 라즈베리 파이랑 연결 작업을 하는 중인데, 툴체인이랑 동기화 작업하면 에러가 납니다.
    (지정한 경로및/ 또는 파일 이름이 너무 깁니다. 정규화된 파일 이름은 260자 미만이어야 하며 디렉터리 이름은 248자 미만이어야 합니다.) 이럼 에러가 뜹니다 ㅠㅠ... 다른곳에서 해결한분은 라즈비안 OS를 재설치했다던데, 재설치 외에 해결방법은 없을까요?? 윈도우 자체 길이허용은 해놨는데도 안되네요...

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.03.04 08:32 신고

      해결 될지 확실치 않지만 아래 링크를 참고해보세요..

      https://slic.tistory.com/1199

    • sa 2020.04.28 09:37

      해결되셨나요? 저도 같은 문제를 만나서 진행이 안되네요

+ Recent posts