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)