C++에서 HTTP 통신 하기가 아주 쉽지않지만 boost 라이브러리를 많이 사용한다고 하여 사용방법을 구글링 하며 찾아보았다.
boost 라이브러리 설치 방법 (Window 기준)
- https://github.com/boostorg/boost , 본 링크에서 boost 라이브러리를 .zip 파일로 다운받아 압축을 해제한다
- "bootstrap.bat" 이름의 배치파일을 실행한다.
- 혹시나 VSCODE로만 컴파일하고자 하였다면 vswhere.exe 파일이 없다고 오류가 날 수 도 있다.
본인은 여러시도를 해보다가 visual studio를 설치하였다.... 그러니 오류 해결
- 혹시나 VSCODE로만 컴파일하고자 하였다면 vswhere.exe 파일이 없다고 오류가 날 수 도 있다.
- "bootstrap.bat" 로 인해 b2.exe파일이 생성된다. b2.exe파일을 실행시키면 본 라이브러리를 사용할 준비는 되었다.
(시간이 꽤나 걸린다. 라이브러리 용량이 1기가 이상이라 그런듯하다)
boost 라이브러리 사용방법을 찾기 위한 여정(VSCODE에서 컴파일)
라이브러리가 잘 동작하는지 테스트 하기위해 아래 링크의 예제를 사용하였다.
https://www.boost.org/doc/libs/1_79_0/libs/beast/example/http/client/sync/http_client_sync.cpp
1. 기존 vscode에서 C++을 컴파일 하는 방법대로* 하게되면 지속적인 include 오류가 발생했다.
include path를 조정해보고, 해당하는 폴더(boost-beast)에 들어가서 core.hpp가 있는것을 눈으로 확인했음에도 인식이 되지 않는다
기존 방법 : https://velog.io/@youhyeoneee/%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-VS-Code-%EC%97%90%EC%84%9C-CC-%EC%BD%94%EB%94%A9-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-Windows
그리하여 아래와 같이 컴파일 조건을 붙이고 include 경로까지 추가하니 위와 경로 인식 오류는 뜨지 않았지만 'swprintf' is not a member of 'std' 에러가 계속 발생하였다.
g++ test.cpp -std=c++11 -I/Users/qotng/Desktop/Programming/cpp/TerminalReservationSystem/boost
2. 'swprintf' is not a member of 'std' 발생
static_string.hpp 헤더 파일에서 swprintf 함수를 사용하는 부분에서 지속적으로 오류가 발생하였다.
그래서 디버깅을 하려고 해당 오류를 타고 들어가보니 "to_static_wstring_float_impl" 함수에서 아래와 같이 MINGW를 사용하면 어떨수도 있다 라고 특별히 기재해둔것을 확인해서 열심히 구글링했지만 딱히 확실하게 해결되는 방법이 없었다.
그래서 임시방편책으로 동일한 return 타입을 가지고있고 argument로도 동일한 wchar_t*를 가지고 있는 wprintf로 테스트를 해보았다. (swprintf가 문제라면 안쓰면 된다는 마인드)
https://en.cppreference.com/w/cpp/io/c/fwprintf
그래서 swprintf로 인해 오류가 생긴 부분 모두 아래와 같이 wprintf로 바꿔주었다 (인자가 안맞는 것은 모조리 주석!!)
그랬더니... 해결.... 되는 척...
위에서 떴던 swprintf가 std에 속하지 않는 다는 에러는 뜨지 않았다. 휴 다행...
그러나 또다시 다른 오류 등장
3. undefined reference to `WSASetLastError@4'
해당 하는 오류를 해결하기위해 다시 구글형님들께 여쭤보니 링크 제일 아래 #pragma comment(lib, "ws2_32.lib") 를 코드에 명시하는 것은 g++ 컴파일러에서는 사용하지 않는다고 하며 컴파일러 명령에 "-lws2_32 -lcrypt32"를 추가하라고 명하셨다.
https://stackoverflow.com/questions/66371047/mingw32-error-linking-lcrypto-with-undefined-references
은총과 같은 말씀 덕분에 컴파일 완료...
g++ test.cpp -std=c++11 -I/Users/qotng/Desktop/Programming/cpp/TerminalReservationSystem/boost -lws2_32 -lcrypt32
나에게만 생기는 오류였는지는 모르겠지만 누군가가 C++로 http 통신을 하기위해 boost 라이브러리를 사용하실 경우,
부디 해당 오류들로 힘들어하지 않으시길 바라며 작성해봅니다!