'JNI'에 해당되는 글 1건

  1. 2016.11.30 openssl win-32용으로 빌드하여 JNI 만들기

회사에서 진행했던 과제 때문에, 스위프트 서버 설치 뿐만 아니라 관련 테스트 용 어플리케이션을 개발하는데 회사에서 pc 어플리케이션 개발하시는 분이 자바로 개발을 하기 때문에, 최종 목표는 openssl을 윈도용 라이브러리로 빌드하고, 이를 이용하여 JNI를 구현하여 dll을 만든다.윈도 환경에서 openssl의 암호화 라이브러리를 사용해야 하는데, 우선 win32에서 openssl을 빌드하는게 일이다.

 

손에 익진 않지만, dll을 만드는 툴은 visual studio 2015의 vc를 이용한다. 대충 요약하면 이렇다.

 

* 개발 PC 및 환경

 

- 윈도7 프로페셔널, 32비트 버젼

 

* JNI 빌드용

 

- visual studio 2015

- jdk 1.0.8_66 설치 (상위 버젼도 가능)

 

* openssl 빌드용

 

- visual studio command line build 환경

- active perl : openssl configuration script 실행을 위해 필요(http://www.activestate.com/activeperl/downloads)

- nasm : openssl 내의 어셈블리 소스 컴파일용 (https://sourceforge.net/projects/nasm)

 

 

일단 이 정도면 빌드 환경은 다 구성된다.

 

 

1. openssl 빌드

 

* 아래와 같은 순서로 차례로 작업하면 된다.. 간단하다.(!)

 

 

시작-Visual Studio 2015-VS2015MSBuild 명령 프롬프트 실행

 

 

C:\Program Files\Microsoft Visual Studio 14.0>cd VC

C:\Program Files\Microsoft Visual Studio 14.0\VC>vcvarsall.bat x86  è 환경변수 설정

C:\Program Files\Microsoft Visual Studio 14.0\VC>cd \work\openssl-1.0.2h  è openssl 소스디렉토리로 이동

C:\work\openssl-1.0.2h>mkdir c:\work\usr  è openssl 빌드 후 설치 디렉토리

C:\work\openssl-1.0.2h>perl Configure  VC-WIN32 no-shared –-prefix=C:\work\usr  è openssl configuration

C:\work\openssl-1.0.2h>ms\do-nasm.bat  è nasm 환경으로 설정

C:\work\openssl-1.0.2h>nmake –f ms\nt.mak clean  è 중간파일 모두 삭제

C:\work\openssl-1.0.2h>del /Q out32\*  è openssl 출력물 삭제

C:\work\openssl-1.0.2h>nmake –f ms\nt.mak  è openssl 빌드

C:\work\openssl-1.0.2h>nmake –f ms\nt.mak install  è 설치디렉토리로 결과물 복사

 

위의 작업 중 마지막 단계를 마치면, c:\work\usr\ 디렉토리에 헤더와 library 등등의 파일이 복사된다. 자 이걸 가지고 dll을 만들어보자.

 

2. jni DLL 빌드

 

※ java 소스를 이용한 jni header 파일 생성하는 함수는 굳이 이 과정으로 하지 않아도 수동으로 만들어도 된다. 귀찮다지만, 솔직히 자바 소스 만들어서 이러는게 더 귀찮을 수도.. 난 자바 전문가가 아니고 그냥 jni를 만들기 위한 수준의 지식만 있으므로, 자세한 설명은 생략.

 

* 작업 루트 디렉토리는 root = c:\work\jni

 

 

1) jni header 파일 생성

 

* 사용할 jni 클래스 소스 파일이름이 HashNCrypt.java이고 패키지명이 pe.antinuke.algorithm.lib 라고 하면...  java 소스 파일은 C:/work/jni/pe/antinuke/algorithm/lib/HashNCrypt.java 와 같이 저장되어있어야 한다.

 

 명령 프롬프트 실행 후 소스 루트 디렉토리인 c:/work/jni 로 이동

(윈도에서는 디렉토리명 구분자가 \인것은 이미 알고 있다고 간주)

 

C:\work\jni>cd java  è java 작업디렉토리로 이동

C:\work\jni\java>javac pe\antinuke\algorithm\lib\HashNCrypt.java  è java 소스 컴파일

C:\work\jni\java>javahjni pe.antinuke.algorithm.lib.HashNCrypt  è jni header file 추출

C:\work\jni\java>dir

 

C 드라이브의 볼륨에는 이름이 없습니다.

 볼륨 일련 번호: A091-3EBE

 C:\work\jni\java 디렉터리

2016-11-29  오후 02:40    <DIR>          .

2016-11-29  오후 02:40    <DIR>          ..

2016-11-29  오후 01:36    <DIR>          pe

2016-11-29  오후 02:40             3,114 pe_antinuke_algorithm_lib_HashNCrypt.h  è 이 파일을 visual studio

                                                                                                                                   프로젝트에 추가하여 빌드

 

2) dll 만들기

 

* visual studio에서 새 프로젝트 열기 해서 템플릿을 visual C++ - win32 - Win32 프로젝트로 선택하고 적절히 솔루션/프로젝트명 파일명등을 지정한 후 확인을 누르면, win32 응용 프로그램 마법사가 시작된다. 여기서  ATL이나 MFC는 사용하지 않을 것이고 사용해서도 안되므로 언체크.. 나머지 체크박스들도 본인 실력에 따라 체크 또는 언체크하면 되고(난 그냥 별 생각없이 다 언체크 했다), 응용 프로그램 종류만 DLL로 선택후 마침.

 

* 탐색기를 열어 1)에서 만든 jni header 파일을 솔루션 혹은 프로젝트 디렉토리로 복사한 뒤, 일단 다짜고짜 솔루션 탐색기의 헤더파일 항목에서 우클릭하여 추가 - 기존 항목을 선택하여 헤더파일을 프로젝트에 추가한다.

 

* 새파일을 눌러 HashNCrypt.c 로 솔루션/프로젝트 디렉토리에 저장하고 솔루션 탐색기의 소스파일 항목에서 우클릭해서 저장한 c 파일을 프로젝트에 추가.. h에는 프로토타입 뿐이니.. 함수 구성해야지~~

 

* jni를 빌드하기 위한 헤더파일들과 미리 1에서 빌드해둔 openssl의 암호화 함수 관련 라이브러리의 header와 라이브러리 파일 libeay32.lib를 추가해주자.

 

 Project 속성에서 C/C++ - 일반 항목에 추가 포함 디렉토리에 c:\Program Files\java\jdk1.8.0_66\include, C:\Program Files\java\jdk1.8.0_66\include\win32, C:\work\usr\include를 추가

 

- Project 속성에서 링커 - 일반의 추가라이브러리 디렉터리에서 C:\work\usr\lib를 추가, 링커 - 입력의 추가 종속성 항목에 libeay32.lib를 추가한다.

 

* 이제 dll 빌드 준비 끝!

 

 

담번 포스팅에는 jni 함수에 argument 전달하는 내용을 정리해둬야지.. 갑자기 몸살이 올라와서 오늘은 칼퇴근이라는 것을 해봐야겠군..

 

'이런저런 것들 > 피씨 이야기' 카테고리의 다른 글

1TB 하드의 실제 용량.  (0) 2016.12.01
Posted by 켄아자씨
,