Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

라즈베리 파이 제로 용 프로그램 개발을 위한 Eclipse C/C++ 윈도우 환경 설정

라즈베리 파이가 너무 느려서 그 안에서 IDE를 띄워 개발하기에는 다소 답답합니다. 그래서 개별 PC의 윈도우에서 개발한다면 원격 디버깅까지 가능한 Visual Studio를 이용하는 것이 가장 편리한데요,

Visual Studio 2017에서 Raspberry Pi C++ 응용 프로그램 제작
; https://www.sysnet.pe.kr/2/0/11358

부득이 Visual Studio를 사용할 수 없다면 Notepad++에 NppFTP 플러그인을 설치해 개발하는 것도 나쁘진 않습니다. 가령, 간단한 C 프로젝트라면 다음과 같은 식으로 소스 코드와 makefile을 엮으면 그런대로 개발에 큰 불편함은 없습니다.

// $ sudo apt-get install git-core
// $ git clone https://github.com/WiringPi/WiringPi.git
// $ cd wiringPi
// $ git pull origin
// $ ./build

// main.c

#include <stdio.h>
#include <wiringPi.h>

extern int _pinNumber;

int main()
{
    int value;
    
    while (1)
    {
        value = digitalRead(_pinNumber);
        
        printf("%d\n", value);
        
        delay(1000);
    }
} 

// sub.c
int _pinNumber = 5;

# makefile

test.out : main.o sub.o
    gcc -o test.out main.o sub.o -lwiringPi
    
main.o : main.c
    gcc -c -o main.o main.c 
    
sub.o : sub.c
    gcc -c -o sub.o sub.c 
    
clean :
    rm *.o test.out

참고로, Visual Studio Code도 생각해 볼 수 있지만, 아쉽게도 "라즈베리 파이 제로"가 armv6l CPU의 명령어 셋이라 Visual Studio Code도 실행할 수가 없고, 심지어 "Remote-SSH" 확장으로도 접속할 수 없습니다. (접속 시도 시 "The remote host's architecture is not supported."라는 오류가 발생합니다.)




Notepad++/NppFTP의 조합에서 빠진 것이 있다면 역시 디버깅인데요, 어쩔 수 없군요, ^^ Eclipse의 힘을 빌려야겠습니다.

이를 위해 "Eclipse IDE for C/C++ Developers"를 윈도우 PC에 설치한 다음,

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

"GNU toolchain for raspberry"를 다운로드해 설치합니다.

Prebuilt Windows Toolchain for Raspberry Pi
; https://gnutoolchains.com/raspberry/

raspberry-gcc8.3.0-r3.exe 
; https://sysprogs.com/getfile/1362/raspberry-gcc8.3.0-r3.exe

설치 후, "C Managed Build" 타입의 새 프로젝트를 선택, "Toolchains"의 항목을 "Cross GCC" 유형으로 생성합니다.

raspberry_pi_dev_eclipse_1.png

위의 과정 이후 "Cross GCC Command"를 설정하는 창이 나오는데 여기에는 이전에 설치한 "GNU toolchain for raspberry"의 컴파일러 경로를 입력합니다.

raspberry_pi_dev_eclipse_2.png

Cross compiler prefix: arm-linux-gnueabihf-
Cross compiler path: C:\SysGCC\raspberry\bin

그렇게 해서 생성한 기본 소스 코드를 다음과 같이 바꿔주고,

#include <stdio.h>
#include <wiringPi.h>

int _pinNumber = 5;

int main()
{
    int value;

    while (1)
    {
        value = digitalRead(_pinNumber);

        printf("%d\n", value);

        delay(1000);
    }
}

"Project" / "Properties" 창을 열어 "C/C++ Build" / "Settings" 범주의 "Cross GCC Linker" / "Libraries"에 "wiringPi" 라이브러리를 추가합니다.

raspberry_pi_dev_eclipse_3.png

끝입니다. 이제 "Ctrl + B(Build)"를 누르면 컴파일이 되고 /Debug 폴더에 "blink" 실행 파일이 생성됩니다. 재미있는 것은 "GNU toolchain for raspberry"으로 컴파일했기 때문에 생성된 바이너리가 라즈베리 파이 32비트 ARM CPU 명령어 셋을 가진 리눅스 실행 파일 포맷이라는 점입니다.

따라서 윈도우에서 실행은 안되지만, 그 파일을 라즈베리 파이에 복사 후 실행하면 정상적으로 구동이 됩니다.

물론, 저런 식으로 ^^; 개발을 하고 싶진 않을 것입니다. 마찬가지로 비주얼 스튜디오에서 그랬던 것처럼, Eclipse에서도 IDE 내에서 실행 시 원격 라즈베리 파이로 자동으로 복사되고 디버깅까지 하고 싶을 텐데요, 이를 위해서는 라즈베리 파이 측에 gdbserver 구성 요소를 설치해 두고,

$ sudo apt-get install gdbserver

Eclipse의 "Run" / "Run Configurations..." 메뉴를 선택하면 "C/C++ Remote Applications"를 설정할 수 있는 창이 뜹니다.

raspberry_pi_dev_eclipse_4.png

위의 화면에서 왼쪽 상단에 있는 "New Configuration" 아이콘을 눌러 새로운 설정을 추가한 다음, "Connection"이 현재 "Local"만 제공되고 있으므로 "New..." 버튼을 눌러 "SSH" 유형의 연결을 추가한 다음,

raspberry_pi_dev_eclipse_5.png

프로젝트의 실행 파일(이 글의 예제에서는 blink)이 원격지 컴퓨터의 어디로 복사될 것인지, 그리고 복사 이후 실행할 명령어를 지정해 줍니다.

raspberry_pi_dev_eclipse_6.png

Remote Absolute File Path for C/C++ Application: /home/pi/sample/blink
Commands to execute before application: chmod 755 /home/pi/sample/blink

위의 예에서는 blink 실행 파일을 "/home/pi/sample/" 디렉터리에 복사하기 때문에 원격지(라즈베리 파이)에 동일한 디렉터리가 존재해야 합니다. (없으면 만들어 줍니다. ^^) 또한, 복사한 파일은 실행 권한이 없으므로 "chmod 755 ..."를 이용해 지정한 것도 유의해야 합니다.

설정을 완료하면, 위의 화면에서 지정한 "Name" (이 글에서는 "blink Debug")에 해당하는 항목이 디버그 아이콘 메뉴에 나오므로,

raspberry_pi_dev_eclipse_7.png

이를 선택하면 원격 디버깅을 시작하고 BP(Breakpoint) 및 Step Into/Over를 이용한 동작을 수행할 수 있습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 5/5/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13945정성태6/7/2025458오류 유형: 960. 파이썬 + conda - mysqlclient 사용 시 "NameError: name '_mysql' is not defined" 에러
13944정성태6/7/2025475오류 유형: 959. The trust relationship between this workstation and the primary domain failed. - 네 번째 이야기
13943정성태6/6/2025710개발 환경 구성: 748. Windows + Foundry Local - 로컬에서 AI 모델 활용
13942정성태6/5/2025886오류 유형: 958. winget 설치 시 "0x80d02002 : unknown error"
13941정성태6/2/20251039닷넷: 2334. C# - cpuid 명령어를 이용한 CPU 제조사 문자열 가져오기파일 다운로드1
13940정성태6/1/20251419C/C++: 188. C++의 32비트 + Release 어셈블리 코드를 .NET으로 포팅할 때 주의할 점파일 다운로드1
13939정성태5/29/20251711오류 유형: 957. NVIDIA Triton Inference Server - version `GLIBCXX_3.4.32' not found (required by /opt/tritonserver/backends/python/triton_python_backend_stub)
13938정성태5/29/20251435개발 환경 구성: 747. 파이썬 - WSL/docker에 구성한 Triton 예제 개발 환경
13937정성태5/24/20251360개발 환경 구성: 746. Windows + WSL2 환경에서 (tensorflow 등의) NVIDIA GPU 인식
13936정성태5/23/20251189개발 환경 구성: 745. Linux / WSL 환경에 Miniconda 설치하기
13935정성태5/20/20251233파이썬 - pip 사용 시 "ImportError: cannot import name 'html5lib' from 'pip._vendor'" 오류
13934정성태5/20/20251712스크립트: 77. 파이썬 - 'urllib.request' 모듈의 명시적/암시적 로딩 차이
13933정성태5/19/20251291오류 유형: 956. Visual Studio 2022가 17.12 버전부터 업데이트 되지 않는다면?
13932정성태5/18/20251502스크립트: 76. 파이썬 - Version 문자열 다루기(semver 패키지)
13931정성태5/17/20251793스크립트: 75. 파이썬 - Cython 기본 예제 및 컴파일
13930정성태5/17/20251491개발 환경 구성: 744. 파이썬 - Windows embeddable package 환경에서 외부 패키지 사용하는 방법(ex: UFO² 환경 구성)
13929정성태5/16/20251519오류 유형: 955. 파이썬 - "Windows embeddable package" REPL 환경에서 "NameError: name 'exit' is not defined"
13928정성태5/15/20251558오류 유형: 954. UFO² - "'Invalid URL (POST /v1/chat/completions/chat/completions)'"
13927정성태5/15/20251545오류 유형: 953. OpenAI - The API request of HOST_AGENT failed: OpenAI API request exceeded rate limit: Error code: 429
13926정성태5/14/20251907개발 환경 구성: 743. LLM과 윈도우의 만남 - Desktop AgentOS UFO² 기본 환경 구성
13925정성태5/12/20252010닷넷: 2333. C# - (Console 유형의 프로젝트에서) Clipboard 연동파일 다운로드1
13924정성태5/8/20251759닷넷: 2332. C# - (JetBrains Omea Reader 대상으로) 런타임 시에 메서드 가로채기 [2]파일 다운로드1
13923정성태5/5/20251505스크립트: 74. 파이썬 - C# - Python.NET의 RunSimpleScript, Exec, Eval 차이점파일 다운로드1
13922정성태5/3/20251757스크립트: 73. 파이썬 - Windows embeddable package 버전에서 tkinter 환경 구성
13921정성태5/3/20252284오류 유형: 952. 듀얼 채널 메모리 정렬을 지키지 않은 컴퓨터의 Windows 비정상 종료 현상(Blue Screen) [2]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...