Window Mosquitto Source build, debug
목차
Mosquitto 코드를 Debuging하며 이해하기 위해 작성하였습니다.
MQTT 프로토콜에 대해 잘 모르신다면 MQTT 프로토콜 이란?을 보고 오시기 바랍니다.
개발 환경
- Mosquitto-1.4.14 (구버전도 가능)
- Visual studio 2015 (2017도 가능)
- Window 10 pro 64bit (Window 7도 가능)
소프트웨어 설치
모든 설치 환경을 32bit로 맞춰야 함
Window Visual studio Express 2015 다운
Download and unzip cmake
- libwebsocket, mosquitto 프로젝트의 CmakeLists.txt 에 따라 프로젝트를 빌드하여 생성하기 위해 필요
pthread-win32 download & install
- Mosquitto에서 저 경로에 pthreads라는 폴더를 찾기 때문에 꼭 이름, 경로가 일치해야 함 pthreads위에 또 폴더가 존재해선 안됨
c:\pthreads\
경로에 unzip
OpenSSL library download & install
- 컴파일을 위해서는 Light 버전이 아닌 FULL 버전 설치, (프로그램 실행만을 위해서는 Light 버전)
pthreads와 마찬가지로c:\OpenSSL-Win32\
경로에 unzip
libwebsocket source download
- 최신버전 다운
마찬가지로c:\libtemp\
경로에 unzip
mosquitto source download
- mosquitto1.4.14 다운
마찬가지로c:\mostemp\
경로에 unzip
- 완료 됐을 시 총 4개의 폴더가
c:\
에 있어야 함
Cmake를 이용하여 websocket.dll을 얻기 위함입니다. 쉽지 않으니 천천히 경로에 유의하며 따라오세요.
libwebsocket
Cmake Configuration
- Cmake-gui 를 열어 libwebsocket 빌드 준비
C\libtemp\libwebsockets-2.4.1\
의 위치에 build Directory 생성
- Cmake-gui 설정
- Configure를 클릭하여 Visual Studio 14 2015 선택, 사용하는 Visual Studio 버젼이 2017이면 Visual Studio 15 2017 선택
- 에러 창이 나온다면 ok 클릭
CMAKE_INSTALL_PREFIX
를C:\libtemp\libwebsockets-2.4.1
로 변경
- OpenSSL 경로 추가
LWS_WITH_SSL
체크 해제 후 Configure 클릭
- Configure done 이 확인된 후 Generate 버튼을 클릭하여 프로젝트 생성
- Generate done 확인 후 Open Project클릭하여 프로젝트 Open
Visual Studio Configuration
- Release 와 Win32 상태 확인 후 ALL_BUILD 를 이용하여 빌드
websocket.dll
이 생성되었는지 확인
Visual Studio 2015에서 디버깅 하기 위함입니다. 진행하며 부족하다고 나온 dll 파일은 해당 프로젝트의 debug directory에 넣으면 해결할 수 있습니다.
mosquitto
Cmake Configuration
C:\mostemp\mosquitto-1.4.14\
의 위치에 build Directory 생성
- Source 코드 경로와 build 경로를 맞춰준 뒤 configure 버튼 클릭
- Configure를 클릭하여 Visual Studio 14 2015 선택 후 finish 클릭
- 에러가 나면 ok 클릭 (에러가 나도 다음 절차 후에 해결 가능)
- Add Entry를 눌러 OpenSSL 경로 추가해 주고 configure 를 다시 클릭
WITH_WEBSOCKETS
체크
CMAKE_INSTALL_PREFIX
를C:\mostemp\mosquitto-1.4.14
로 변경
- Configure, Generate를 눌러 확인후 Open Project 를 클릭하여 프로젝트를 연다
여기서부터 사진과 같이 6개의 프로젝트를 모두 선택한 후 속성으로 들어가서 사진과 같이 구성을 모든 구성으로 맞춰주세요. 6개 프로젝트의 Debug 모드와 Release 모드 설정을 한꺼번에 하기 위함입니다.
Visual Studio Configuration
- vc++ 디렉터리->포함 디렉터리
C:\libtemp\libwebsockets-2.4.1\build
C:\libtemp\libwebsockets-2.4.1\lib
두개의 경로를 추가
헤더 파일을 읽을 수 있게 해줌
- vc++ 디렉터리->라이브러리 디렉터리
C:\libtemp\libwebsockets-2.4.1\build\lib\Release
하나의 경로를 추가
- c/c++ -> 일반 -> 추가 포함 디렉터리
C:\libtemp\libwebsockets-2.4.1\build
C:\libtemp\libwebsockets-2.4.1\lib
두개의 경로를 추가
- mosquitto 프로젝트->c/c++ -> 전처리기
WITH_TLS
,WITH_TLS_PSK
제거 (컴파일 오류를 막기위해)
C:\mostemp\mosquitto-1.4.14
의config.h
의 15행 을 주석처리
C:\pthreads\Pre-built.2\include
경로의pthread.h
의 320~323라인 주석처리
- 먼저 Release 모드로 ALL_BUILD를 빌드
- 사진과 같은 오류가 난다면
- mosquitto_passwd 프로젝트 -> 링커 -> 입력
optimized.lib
제거 및debug.lib
제거
- 만약
libeay32.dll
이나ssleay32.dll
파일이 없다고 오류가 난다면 해당 프로젝트의build\src\Release
에 해당 dll 파일을 넣어준다.
- Release 된 mosquitto broker 와 client 를 확인 (.exe 파일)
C:\mostemp\mosquitto-1.4.14\build\src\Release
C:\mostemp\mosquitto-1.4.14\build\client\Release
클라이언트의 .dll 파일 환경 변수 PATH 설정을 위한 과정입니다. 그림과 같이 Pub Client와 Sub Client를 한꺼번에 선택한 후 작업을 진행해 주세요.
- 구성 속성 -> 디버깅 -> 환경 -> 편집
PATH=C:\pthreads\Pre-built.2\dll\x86;C:\pthreads\Pre-built.2\lib\x86;C:\mostemp\mosquitto-1.4.14\build\lib\Debug;C:\libtemp\libwebsockets-2.4.1\build\bin\Release
mosquitto의 dll 파일과 libwebsocket의 dll 파일 그리고 혹시 사용할 pthread의 dll 파일의 환경 변수 PATH 설정을 해준다.
확인
- 이제 Debug 모드로 Visual Studio에서 Debugging를 진행한다.
참고
- https://github.com/bapowell/bapowell.github.io/wiki/Mosquitto-Build-Notes-(Windows—Visual-Studio)