이전 글에서 계속


4. depixelize 컴파일


앞에서도 썼듯이, 몇 가지 튜닝을 해야 정상적으로 컴파일할 수 있다.

우선 다운받은 파일을 적절한 폴더에서 압축을 풀면 아래와 같은 구성을 볼 수 있다.



여기서 우선 src 폴더에 저장된 CMakeLists.txt 파일에 Boost 및 OpenCV의 폴더 정보를 추가하여 아래와 같이 수정한다.


cmake_minimum_required(VERSION 2.8)
project(depixelize)

set(BOOST_ROOT c:/_lib/boost_1_62_0)
set(BOOST_INCLUDE_DIRS c:/_lib/boost_1_62_0/boost)
set(BOOST_LIBRARYDIR c:/_lib/boost_1_62_0/stage/win32/lib)
set(OpenCV_DIR c:/_lib/opencv/build)
set(OpenCV_INCLUDE_DIRS c:/_lib/opencv/build/include)
include(build/CMakeLists.txt)

include_directories(
  ${PROJECT_SOURCE_DIR}
  ${Boost_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

add_subdirectory(depixelize)
add_subdirectory(render)


그리고, 앞에서 했던 것과 동일하게 build 폴더에서 아래와 같이 실행한다.


cmake ..\src


그런데… 잘 되지 않는다. 아래와 같은 오류가 발생한다.


CMake Error at C:/Apps/cmake/share/cmake-3.6/Modules/FindBoost.cmake:1753 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.62.0

  Boost include path: C:/_lib/boost_1_62_0

  Could not find the following Boost libraries:

          boost_filesystem
          boost_system


이 문제를 해결하려면 c:\_lib\boost_1_62_0\stage\win32\lib\에서 파일 두 개를 아래와 같이 이름을 바꿔서 복사하면 된다.


c:

cd c:\_lib\boost_1_62_0\stage\win32\lib\

copy libboost_filesystem-vc140-mt-1_62.lib boost_filesystem.lib

copy libboost_system-vc140-mt-1_62.lib boost_system.lib


여기서 다시 cmake를 위와 같은 방법으로 실행하면 depixelize.sln 등의 파일이 생성된다.

이 sln 파일을 더블클릭하면 Visual Studio 2015에서 프로젝트를 읽어들인다.



5. getopt.h 설치


그런데, 이것만으로는 컴파일이 되지 않는다.

Visual Studio에선 getopt.h가 없기 때문에 정상적으로 컴파일되지 않는다.

skandhurkat / Getopt-for-Visual-Studio에서 getopt.h를 다운받아 소스에 포함시켜야 한다.

...\src\depixelize\getopt.h를 복사한 뒤에 Solution Explorer - depixelize에 추가한다.


그리고 main.cpp에서


#include <getopt.h>




#include "getopt.h"


로 수정한다.



6. parse_args() 수정


main.cpp 파일에 parse_args() 함수가 있다.

이 함수에선 string을 사용하는데, 형변환 과정에서 WCHAR와 char가 혼용되어 문제를 일으킨다.


이 문제를 해결하려면 main.cpp 상단에 아래 내용을 추가한 뒤


#ifdef _MSC_VER
#include <atlstr.h>
#endif


이 부분을


  std::strcpy(options->output_filename, filename.c_str());


아래와 같이 수정한다.


#ifdef _MSC_VER
CW2A temp(filename.c_str());
std::strcpy(options->output_filename, temp);
#else
std::strcpy(options->optput_filename, filename.c_str());
#endif



다음 글에 계속…



+ Recent posts