Tensorflow 라이브러리를 이용하여 Windows Third party 응용프로그램 빌드를 위한 환경 설정
enuSpace for jupiter - work note
Tensorflow 소스 빌드 : http://enuspace.tistory.com/entry/Tensorflowwindow10build
Tensorflow를 이용하여 윈도우환경에서 64bit release용 라이브러리 및 obj 파일이 생성되었다면, 라이브러리를 이용하여 응용 프로그램 개발 환경에 설정을 위한 셋업과정이다.
본장에서는 Tensorflow의 라이브러리를 새로운 dll프로젝트에 추가하여 외부 응용프로그램과 연동하기 위한 플로그인 프로젝트를 목적으로 한다.
dll 프로젝트 생성 및 호출
- Visual Studio를 이용하여 dll 프로젝트를 생성 : Win32 Console Application -> Application type : dll 선택 및 생성
- 기본적으로 dll의 예시코드가 생성된다.
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
- dll은 외부와 연동할 함수를 추가
extern "C" __declspec(dllexport) bool OnInit();
extern "C" __declspec(dllexport) bool OnLoad();
extern "C" __declspec(dllexport) bool OnUnload();
extern "C" __declspec(dllexport) bool OnTask();
- dll의 프로젝트의 작업 환경은 64bit, relese, multibyte옵션 설정을 수행한다.
- Tensorflow r1.1 윈도우10에서 C++ 컴파일 방법 (x64)에 따라서 생성된 환경을 이용 : http://enuspace.tistory.com/entry/Tensorflowwindow10build
- DLL project 환경에 include 디렉토리 내용을 추가
D:\Workspace\tensorflow
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\zlib_archive
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\gif_archive\giflib-5.1.4
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\png_archive
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\jpeg_archive
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\eigen_archive
D:\Workspace\tensorflow\third_party\eigen3
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\gemmlowp\src\gemmlowp
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\jsoncpp\src\jsoncpp
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\farmhash_archive
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\farmhash_archive\util
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\external\highwayhash
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\protobuf\src\protobuf\src
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc\include
- DLL project 환경에 라이브러리 내용 추가.
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_cc_framework.dir\Release\tf_cc_framework.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_cc_ops.dir\Release\tf_cc_ops.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_core_cpu.dir\Release\tf_core_cpu.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_core_direct_session.dir\Release\tf_core_direct_session.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_core_framework.dir\Release\tf_core_framework.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_core_kernels.dir\Release\tf_core_kernels.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_core_lib.dir\Release\tf_core_lib.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_core_ops.dir\Release\tf_core_ops.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\Release\tf_protos_cc.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\protobuf\src\protobuf\Release\libprotobuf.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\protobuf\src\protobuf\Release\libprotoc.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_cc.dir\Release\tf_cc.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\zlib\install\lib\zlibstatic.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\gif\install\lib\giflib.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\png\install\lib\libpng12_static.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\jpeg\install\lib\libjpeg.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\jsoncpp\src\jsoncpp\src\lib_json\Release\jsoncpp.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\farmhash\install\lib\farmhash.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\highwayhash\install\lib\highwayhash.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc\Release\grpc++_unsecure.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc\Release\grpc_unsecure.lib
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\grpc\src\grpc\Release\gpr.lib
- Tensorflow 프로젝트 라이브러리를 빌드하다보면, 매번 전체 컴파일을 수행한다. 본 dll프로젝트는 reference 항목에 관련 라이브러리를 추가하지 않고 참조 라이브러에 추가를 수행한다.
- Preprocessor Definitions 항목에 다음 내용을 추가.
NDEBUG
_WINDOWS
_USRDLL
ENUTENSORFLOW_EXPORTS
EIGEN_AVOID_STL_ARRAY
NOMINMAX
_WIN32_WINNT=0x0A00
LANG_CXX11
COMPILER_MSVC
OS_WIN
_MBCS
WIN64
WIN32_LEAN_AND_MEAN
NOGDI
PLATFORM_WINDOWS
TENSORFLOW_USE_EIGEN_THREADPOOL
EIGEN_HAS_C99_MATH
_ITERATOR_DEBUG_LEVEL=0
TF_COMPILE_LIBRARY
CMAKE_INTDIR="Release"
_CRT_SECURE_NO_WARNINGS
위와같이 환경설정을 하고 난후 샘플 tutorial 샘플 코드를(tf_tutorials_example_trainer)참조하여 빌드를 수행한다.
#include "tensorflow/cc/ops/standard_ops.h"
#include "tensorflow/core/framework/graph.pb.h"
#include "tensorflow/core/framework/tensor.h"
#include "tensorflow/core/graph/default_device.h"
#include "tensorflow/core/graph/graph_def_builder.h"
#include "tensorflow/core/lib/core/threadpool.h"
#include "tensorflow/core/lib/strings/stringprintf.h"
#include "tensorflow/core/platform/init_main.h"
#include "tensorflow/core/platform/logging.h"
#include "tensorflow/core/platform/types.h"
#include "tensorflow/core/public/session.h"
extern "C" __declspec(dllexport) bool OnLoad()
{
tensorflow::example::Options opts;
tensorflow::example::ConcurrentSessions(opts);
return true;
}
---------
참고로 Tensorflow 홈페이지에서 제공하는 basic 코드를 삽입하였을 경우 추가적인 라이브러리 생성 및 추가를 수행한다.
tensorflow 솔루션 오픈, tf_cc 프로젝트 컴파일 수행.
D:\Workspace\tensorflow\tensorflow\contrib\cmake\build\tf_cc.dir\Release\tf_cc.lib 라이브러리 추가.
'enuSpace for jupiter(2019) > Work note(jupiter)' 카테고리의 다른 글
Tensorflow를 이용한 MNIST linear regression 구현 (그래픽 블럭-enuSpace) (1) | 2017.12.08 |
---|---|
Tensorflow를 이용한 GradientDescent 구현 (그래픽 블럭) (0) | 2017.10.20 |
Tensorflow (r1.3) 윈도우10에서 C++ 컴파일 방법 (0) | 2017.08.22 |
enuSpace for jupiter deep learning(tensorflow) plugin project 오픈소스 생성 (0) | 2017.07.12 |
Tensorflow (r1.1) 윈도우10에서 C++ 컴파일 방법 (0) | 2017.05.16 |