반응형



Visual Studio 2017에서 추가된 Linux 개발 기능을 Raspberry Pi에서 테스트해보았습니다.

원격 디버깅도 가능하다는데 아직 못해봤습니다.




1. Linux development with C++를 위한 워크로드 설치

2. 프로젝트 생성 1 - Blink

3. 프로젝트 생성 2 - ConsoleApplication

4. 참고



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



1. Linux development with C++를 위한 워크로드 설치


이미 Visual Studio 2017이 설치되어 있는 경우에는 시작메뉴에서 Visual Studio Installer를 실행합니다.





추가로 설치할 항목을 선택하기 위해서 수정을 클릭합니다.





워크 로드에서 C++를 사용한 Linux 개발을 체크하고  





추가로 포함 및 IoT 개발을 체크합니다.





수정 버튼을 클릭하면 설치가 진행됩니다.





Visual Studio 2017를 새로 설치하는 경우에는  다음 포스팅에서 소개한 대로 C++ 개발 환경 관련 항목 선택 시, 추가로 위에서 선택한 C/C++를 사용한 Linux 개발을 선택하면됩니다.


Visual Studio Community 2017 설치하는 방법

http://webnautes.tistory.com/1131




Raspberry Pi에 C/C++ 컴파일러(build-essential) 외에 추가로 gdbserver를 설치해줘야 합니다.


pi@raspberrypi:~ $ sudo apt-get install build-essential gdbserver




2. 프로젝트 생성 1 - Blink

1. 메뉴에서 파일 > 새로 만들기 > 프로젝트를 선택합니다.




2. 플랫폼 간 하위 항목인 Linux를 선택합니다.




3. 깜박임(Raspberry)를 선택하고 확인을 클릭합니다.





다음과 같은 소스 코드가 생성됩니다.

추가로 노란색 2줄을 추가하여 printf문 출력 테스트까지 해보았습니다.


#include <wiringPi.h>
#include <cstdio>


// LED 핀 - wiringPi 핀 0은 BCM_GPIO 17입니다.
// wiringPiSetupSys를 초기화할 때 BCM 번호 매기기를 사용해야 합니다.
// 다른 PIN 번호를 선택하는 경우에도 BCM 번호 매기기를 사용하세요.
// 속성 페이지 - 빌드 이벤트 - 원격 빌드 후 이벤트 명령을 업데이트하세요.
// 이 명령에서는 wiringPiSetupSys 설정의 GPIO 내보내기가 사용됩니다.
#define LED 17

int main(void)
{
wiringPiSetupSys();

pinMode(LED, OUTPUT);

while (true)
{
digitalWrite(LED, HIGH);  // 켜기
delay(500); // ms
digitalWrite(LED, LOW);  // 끄기
delay(500);


            printf("hi\n");
}
return 0;
}




4. 툴바에 있는 원격 GDB 디버거를 클릭합니다.




원격 GDB 디버거가 보이지 않는 경우  메뉴에서 도구 옵션을 선택하고...

옵션 창에서 플랫폼 간 > 연결관리자를 선택하면 추가할 수 있습니다.

이 경우 6번을 진행하세요.





5.  예를 클릭합니다.





6. Raspberry Pi에 최초 연결시에만 아래와 같은 창이 보이게 됩니다. 이후 IP가 변경되면 프로젝트 속성에서 변경해줘야 합니다.


호스트 이름에 Raspberry Pi의 아이피를 입력합니다.

사용자 이름과 암호에 각각 pi와 암호를 입력하고 연결을 클릭합니다.





빌드가 완료되면 바로 프로그램이 라즈베리파이에서 실행됩니다.


1>------ 빌드 시작: 프로젝트: Blink1, 구성: Debug ARM ------
1>Validating architecture
1>Validating sources
1>Copying sources remotely to '192.168.0.22'
1>Starting remote build
1>Compiling sources:
1>main.cpp
1>Linking objects
1>Blink1.vcxproj -> c:\Users\webnautes\documents\visual studio 2017\Projects\Blink1\Blink1\bin\ARM\Debug\Blink1.out
1>Invoking gpio export 17 out
========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========




7. GPIO 17번핀과 그라운드에 LED를 연결해보면 깜빡이는 것을 확인할 수 있습니다.





8. 툴바에서 디버깅 중지(빨간색 네모) 아이콘을 클릭하면 프로그램이 종료되고 LED 깜박임이 중단됩니다.





9. printf문 결과를 Visual Studio에서 보기 위해서는 메뉴에서 프로젝트 속성을 선택하고 디버깅 모드를 gdb로 변경해야 합니다.





10. 다음처럼 hi 문자열이 출력되는 것을 볼 수 있습니다.

Loaded '/lib/ld-linux-armhf.so.3'. Symbols loaded.
Loaded 'linux-vdso.so.1'. Cannot find or open the symbol file.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
Loaded '/usr/lib/arm-linux-gnueabihf/libarmmem.so'. Symbols loaded.
Loaded '/usr/lib/libwiringPi.so'. Symbols loaded.
Loaded '/usr/lib/arm-linux-gnueabihf/libstdc++.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libm.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libgcc_s.so.1'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libc.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libpthread.so.0'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/librt.so.1'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libcrypt.so.1'. Symbols loaded.
hi
hi
hi
hi
hi
hi
kill
'' 프로그램이 종료되었습니다(코드: 0 (0x0)).




3. 프로젝트 생성 2 - ConsoleApplication


1. 이번엔 콘솔 응용 프로그램으로 생성했습니다.





다음과 같은 소스 코드가 생성됩니다.


#include <cstdio>

int main()
{
   printf("hello from ConsoleApplication1!\n");
   return 0;
}




2. 툴바에서 플랫폼을 ARM으로 변경하고 원격 GDB 디버거를 클릭합니다.





3. 예를 클릭합니다.





4. 빌드 후, 실행되면서 다음과 같은 에러가 났습니다.


Loaded 'shared libraries loaded at this time.'. Cannot find or open the symbol file.


Program received signal SIGSEGV, Segmentation fault.

0xfffffffc in ?? ()




5. 메뉴에서 프로젝트 > 속성을 선택하고 디버깅 모드를 gdbserver에서 gdb로 변경해주어 해결되었습니다.





6. 아래 노란줄 처럼 출력결과를 확인할 수 있습니다.


(gdb) 1002-enable-pretty-printing
(gdb) 1004-gdb-set stop-on-solib-events 1
(gdb) 1005-environment-cd ~/projects/ConsoleApplication1/bin/ARM/Debug/
Loaded '/lib/ld-linux-armhf.so.3'. Symbols loaded.
Loaded 'linux-vdso.so.1'. Cannot find or open the symbol file.
Loaded '/usr/lib/arm-linux-gnueabihf/libarmmem.so'. Symbols loaded.
Loaded '/usr/lib/arm-linux-gnueabihf/libstdc++.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libm.so.6'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libgcc_s.so.1'. Symbols loaded.
Loaded '/lib/arm-linux-gnueabihf/libc.so.6'. Symbols loaded.
hello from ConsoleApplication1!
'' 프로그램이 종료되었습니다(코드: 0 (0x0))




4. 참고

https://blogs.msdn.microsoft.com/vcblog/2017/04/11/linux-development-with-c-in-visual-studio/




반응형

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

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

유튜브 구독하기


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

  1. 질문있습니다 2018.02.21 23:31

    컴파일을 돌리면 warning: GDB: Failed to set controlling terminal 이러한 오류가 나는데 이럴때는 어떻게 해야하는건가요?

  2. 농구곰 2019.05.01 22:20

    블로그에서 도움 많이 받고 있습니다.
    항상고맙습니다.
    4번에서 툴바에 원경GDB 디버거가 없습니다
    그냥 없음이라고 뜨는데 어떻게 해야하나요???

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

      진행 방법이 바뀐듯합니다.

      메뉴에서 도구 옵션을 선택하고 옵션 창에서 플랫폼 간 > 연결관리자를 선택하면 추가할 수 있습니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.02 06:16 신고

      가급적이면 비주얼스튜디오 설치관리자에서 비주얼 스튜디오를 최신 버전으로 업데이트하고 진행하세요.

      같은 비주얼 스튜디오2017이라도 세부 버전에 따라 방법에 차이가 있기 때문입니다.

  3. doo 2019.05.02 14:48

    혹시 이 방법으로 opencv도 개발할 수 있는 건가요??

  4. 살려주세요 2019.08.25 15:18

    윗 댓글로 opencv 개발이 어렵다 하셨는데 그러면 어떻게 해야 가능할까요??

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.25 15:22 신고

      아래 방법이 좋울듯합니다.

      Raspberry Pi에서 쉽게 코드 작성하는 방법(Sublime Text 3 사용)
      https://webnautes.tistory.com/1327

  5. 살려주세요 2019.08.25 15:51

    라즈베리파이 설치부터 지금까지 제일 많이 들어오는 곳 입니다. 정말 유용한 페이지입니다. 주신 주소에서 열심히 해보겠습니다. 정말 감사합니다
    ///
    추가질문 드려도 될까요ㅠㅠ

    컴퓨터에 웹캠을 달고 visual studio 에서 opencv코드를 짜서 라즈베리파이로 인식값을 보내서 모터를 구동시키고 싶습니다. 간단한 조언 부탁드리겠습니다 ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.25 17:00 신고

      소켓통신으로 작성된 채팅 프로그램을 수정하면 데이터 보내는 것은 해결될 듯합니다

+ Recent posts