[rpi]Windows 10 IoT Core 개발환경 만들기

라즈베리파이3에 WINDOWS 10 IOT CORE 설치

라즈베리파이3 WINDOWS 10 IOT CORE 개발 환경 구축

여기서, 개발 PC를 “개발자 모드”로 변경한다는 것은 원격접속 기능을 사용할 수 있게 한다.

개발 환경 구축하기

WINDOWS 10 IOT CORE에 POWERSHELL로 연결하기

PowerShell로 연결하기

WINDOWS 10 IOT CORE에 SSH로 연결하기

Putty 접속할 때, SSH2_MSG_UNIMPLEMENTED packet error가 발생하면, To solve the issue, open the configuration for the connection and navigate to SSH -> Kex. In the “Algorithm selection policy”, move the “Diffie-Hellman group 14” entry to the first position in the list. (SSH2_MSG_UNIMPLEMENTED packet error with PuTTY and RHEL 7.2 를 참조)한다.

SSH 접속을 위한 PuTTY의 설정 화면

WINDOWS 10 IOT CORE를 위한 VISUAL STUDIO 설정

[rpi]Windows 10 IoT Core

지원하는 보드

https://docs.microsoft.com/en-us/windows/iot-core/tutorials/quickstarter/PrototypeBoards

[참고] 라즈베리파이 3B+는 별도로 설치해야 한다. 참고 사이트는 여기이다.

다운로드하는 곳

https://www.microsoft.com/en-us/software-download/windows10IoTCore

Windows 10 IoT Core Dashboard를 내려받아서, 라즈베리파이에 설치한다. 이 때, 보안경고가 뜨면서 대시보드가 설치되지 않을 수 있다.

응용 프로그램 설치 – 보안 경고 회피 방법

실행창에 regedit를 입력 후 레지스터 편집기로 들어가서..

Internet, Localintranet, MyComputer 모두 Enabled로 변경하니 설치가 되는군요. (참고로 이 방법은 마이크로소프트 사에서 권장하지 않음)

명령어

[rpi]Raspberry Pi Projects

https://pimylifeup.com/category/projects/server/

https://www.networkworld.com/article/3176091/10-killer-raspberry-pi-projects-collection-1.html

https://opensource.com/article/17/4/5-projects-raspberry-pi-home

GPC 컴파일 교훈

과거(2008) 컴파일한 것은 32비트용이었다.

최근(2019) 컴파일해야 하는 것은 64비트용이다.

기존의 프로젝트 파일을 수정하기보다 새로 프로젝트 파일을 만들어서 했다.

Debug 모드가 아니라 Release 모드로 컴파일해야 다른 컴퓨터에서 사용할 수 있다.

c/c++ 소스를 컴파일하는 것이므로, visual c++ redistributable(재배포 패키지)를 설치해야 한다.

컴파일한 DLL이 의존하는 다른 DLL이 없어도 오류가 발생한다. 의존관계를 알 수 있는 프로그램(dependencies)도 있다.

[c/c++]vcruntime140d.dll missing

vcruntime140d.dll과 vcruntime140.dll는 다르다. vcruntime140d.dll는 debug 모드에서 호출되는 DLL이다. vcruntime140.dll 가 호출되도록 하려면, Release 모드로 컴파일해야 한다.

vcruntime140d.dll is missing

위 그림에 있는 gpc64.dll에서 vcruntime140d.dll을 호출하고 있다. 이는 gpc64.dll이 debug 모드로 컴파일되었다는 것을 의미한다. gpc64.dll이 vcruntime140.dll 를 호출하도록 하려면 Release 모드로 다시 컴파일해야 한다.

[참고문헌]

https://social.msdn.microsoft.com/Forums/windows/en-US/06b66cae-d010-441d-bc72-64a8c7cd65bc/missing-vcruntime140ddll-and-ucrtbaseddll?forum=visualstudiogeneral

[.net]네임스페이스와 데이터 타입에 별명 붙이기

길고 복잡한 이름을 갖고 있는 네임스페이스(namespace)나 데이터 타입(data type)에 간단한 별명을 붙여서 사용하면 편리하다. 닷넷에서도 이런 기능을 제공한다.

VB.Net에서 별명을 선언하기

선언된 별명을 사용하기

다음은 Vertex2D를 항목으로 하는 목록을 정의한 것이다.

사용할 때는 다음과 같이 한다.

[참고문헌]

https://pietschsoft.com/post/2007/11/26/net-how-to-alias-namespaces-and-data-types

extern “C” error #2040: expected an identifier

gpc.c를 컴파일하다가 발생한 에러

[해법]

The extern "C" construct is a C++ specific thing, it can’t be used in C. And the compiler treats your source file as a C source file since it has the extension .c.

[참고문헌]

https://stackoverflow.com/questions/16192872/extern-c-error-2040-expected-an-identifier

https://shoon950.tistory.com/entry/함수-오버로딩-extern-C-cplusplus-매크로

https://dojang.io/mod/page/view.php?id=802

[교훈]

확장자 .c와 .cpp의 차이를 기억하자.

System.DllNotFoundException 에러 처리

[문제]

gpc64.dll을 이용한 프로그램을 다른 컴퓨터에서 실행했더니, 제목과 같은 에러 메시지가 발생했다.

실행시켰을 때의 에러 메시지
디버깅했을 때의 에러 메시지

[환경]

Windows 10 x64, Visual Studio 2019

[System.DllNotFoundExceoption 에러 원인]

원인1. 문제의 에러 메시지는 gpc64.dll 파일이 없기 때문에 표시된다.

-> 그런데 해당 폴더에 dll 파일이 존재할 때도 에러가 발생할 수 있다.

원인2. 이 때, 해당 dll(여기서는 gpc64.dll)이 의존하고 있는 dll이 없어도 똑같은 에러가 발생한다.

-> 해당 dll에 의존하는 모든 dll이 설치되지 않았기 때문에 이런 에러가 발생한다.

[해법]

depends.exe(Dependency Walker)를 이용해서 누락된 DLL을 확인할 줄 알았는데, 이를 계승한 새 프로그램(Download here)으로 확인하였다.

확인한 결과, 나의 경우 C++재배포가능패키지가 없었다. 그래서 다음 링크에서 재배포가능패키지를 설치한다.

Install Microsoft Visual C++ 2019 Redistributable Package on the user’s machine

https://support.microsoft.com/ko-kr/help/2977003/the-latest-supported-visual-c-downloads

[교훈]

DLL을 사용할 때, 의존성 여부도 확인해야 한다.

[참고 사이트]

https://www.sysnet.pe.kr/2/0/713

https://stackoverflow.com/questions/14587775/system-dllnotfoundexception-unable-to-load-dll-no-errors-in-dev-machine-but-er