티스토리 뷰



파일질라 서버나 클라이언트 프로그램을 직접 수정하거나 파일질라 코드를 통해서 프로그래밍 스터디를 원하시는 분의 경우에는 파일질라 코드를 컴파일할 수 있는 환경을 준비하는 것이 우선이며 이러한 개발환경은 파일질라 개발팀의 선행 사례를 따르는 것이 간편한 방법일 수 있습니다. 개발 환경 구축에 대한 자료는 https://wiki.filezilla-project.org/Compiling_FileZilla_3_under_Windows 를 참조하시면 됩니다. 기본적으로 파일질라 개발에 이클립스 CDT나 비주얼스튜디오가 사용되지 않고 MSYS 환경에서 MinGW를 사용합니다. C/C++프로그램으로 구성된 파일질라는 오픈 소스 도구를 통해서 간편하게 필드할 수 있습니다.


■ MSYS 환경 설치

MSYS는 Minimal SYStem의 약자로 윈도우에서 유닉스 명령을 수행할 수 있도록 해주는 CYGWIN과 유사한 도구로 MSYS는 CYGWIN 1.3을 좀더 가볍게 만든다는 의도로 시작되었습니다. 소스포지에서 배포하고 있는 패키지를 다운로드받아 압축을 해제하면 MSYS 설치는 끝납니다.

☞ 패키지 다운로드 받기


다운로드 파일의 형태는 7 Zip 파일로 7 Zip이 설치되어 있지 않다면 기업에서도 사용할 수 있는 압축 프로그램 7-Zip를 참조해서 7 Zip을 설치합니다. 위의 그림과 같이 다운로드 받은 파일을 탐색기 팝업 메뉴>7-Zip>압축 풀기... 메뉴를 선택합니다.


압축 해제할 폴더를 위의 그림과 같이 "C:\MinGW"로 입력하고 [확인]을 누릅니다.


압축 해제가 끝나면 위의 그림과 같이 MinGW\msys 폴더가 생성되고 bin 폴더의 내용을 살펴보면 find, grep과 같은 기본적인 유닉스 도구 뿐만아니라 7zip, cvs, svn, git, wget과 같이 유닉스/리눅스에서 많이 사용하는 부가적인 도구까지 설치되어 있음을 확인할 수 있습니다. 컴파일러인 MinGW의 수행 환경을 위해서 MSYS를 설치한다고 보면 좋겠습니다.


■ MinGW 컴파일러 설치

MinGW는 Minimalist GNU for Windows의 약자로 "윈도우 응용 프로그램을 위한 가장 가벼운 개발 환경"을 모토로 시작한 프로젝트입니다.(http://www.mingw.org/) "윈도우 프로그램을 개발할 수 있는 무료 개발 환경이면서도 가벼운 환경" 으로 정리할 수 있겠습니다. MinGW는 32비트용과 64비트용으로 구분해서 설치할 수 있는데 본 포스팅에서는 32비트용을 설치할까 합니다.

☞ 32비트 컴파일러 패키지 다운로드

MSYS 설치와 마찬가지로 다운로드 받은 7-Zip 형태의 압축 파일을 탐색기 팝업 메뉴>7-Zip>압축 풀기... 메뉴로 선택합니다. 


압축 풀기할 폴더를 앞서 MSYS를 설치한 "C:\MinGW\msys"로 입력하고 [확인]을 클릭합니다. 압축 해제가 끝나면 C:\MinGW\msys 아래에 생성된 mingw32 폴더를 mingw로 이름을 변경합니다. 작업후 mingw 폴더의 내용은 아래와 같습니다.



■ 필요한 모듈 코드의 다운로드 및 빌드

이제 부터는 앞서 설치한 MSYS 환경을 통해서 작업합니다. MSYS 환경을 열면 아래의 그림과 같이 터미널 창을 열어서 유닉스 서버에서 작업하는 것처럼 윈도우 환경을 사용할 수 있습니다. 위의 과정에서 설치한 C:\MinGW\msys 디렉토리를 윈도우내에서 동작하는 유닉스 시스템의 루트 폴더로 간주하여 사용할 수도 있고 동시에 윈도우 탐색기에서 일반적인 파일처럼 사용할 수도 있습니다. MSYS 환경을 시작하려면 C:\MinGW\msys 디렉토리에서 msys.bat 파일을 더블클릭하면 됩니다.



본격적인 모듈 빌드에 앞서 아래아 같은 명령을 입력합니다. 명령을 입력한 다음 쉘에 해당 명령이 적용되도록 exit로 창을 닫았다가 다시 열어서 작업을 진행합니다.

echo 'export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"' >> /etc/profile

cp /mingw/bin/windres.exe /mingw/bin/i686-w64-mingw32-windres.exe


아래의 과정은 파일질라에서 사용하는 여러가지 모듈을 준비하는 과정으로 공통적으로 홈 디렉토리에 curl, wget, svn등의 도구로 소스코드를 내려받고 빌드한 다음 라이브러리를 사용할 수 있도록 설치하는 단계로 이루어 집니다. 차례대로 작업을 진행해야 정상적으로 빌드 할 수 있으므로 순서에 주의하세요. 또한 각 단계별로 명령이 정상적으로 수행되었는지 Error 메시지가 없는지 확인하셔야 합니다.


* GMP : The GNU Multiple Precision Arithmetic Library

cd ~

curl -O https://gmplib.org/download/gmp/gmp-6.0.0a.tar.xz

tar xvaf gmp-6.0.0a.tar.xz

cd gmp-6.0.0

./configure --enable-static --disable-shared

make

make install



* Nettle : a low-level cryptographic library

cd ~

wget http://www.lysator.liu.se/~nisse/archive/nettle-2.7.1.tar.gz

tar xvaf nettle-2.7.1.tar.gz

cd nettle-2.7.1

./configure --enable-static --disable-shared --with-lib-path=/usr/local/lib/ --with-include-path=/usr/local/include

make

make install



* GnuTLS : Transport Layer Security Library

cd ~

wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.13.tar.xz

tar xvaf gnutls-3.3.13.tar.xz

cd gnutls-3.3.13

./configure --enable-static --disable-shared GMP_LIBS="-L/usr/local/lib -lgmp" --disable-guile --disable-doc CPPFLAGS='-I/usr/local/include' LDFLAGS='-L/usr/local/lib'

make

make install



* SQLite : SQL database engine

cd ~

wget http://sqlite.org/2015/sqlite-autoconf-3080803.tar.gz

tar xvaf sqlite-autoconf-3080803.tar.gz

cd sqlite-autoconf-3080803

./configure --enable-static --disable-shared

make

make install



* wxWidgets : Cross-Platform GUI Library

cd ~

svn co https://github.com/wxWidgets/wxWidgets/branches/WX_3_0_BRANCH

cd WX_3_0_BRANCH

./configure --enable-static --disable-shared --enable-unicode

make

make install




■ 파일질라 코드 체크아웃 및 빌드

개발 환경의 준비가 제대로 되었는지는 소스코드를 가지고 정상적으로 빌드하고 빌드한 프로그램이 정상 동작하는 것을 확인하는 것으로 판단할 수 있을 것입니다. 파일질라 형상관리 리포지토리에서 최신의 코드를 체크아웃 받고(svn) 환경을 준비한 다음 빌드하는 과정으로 이루어집니다.

cd ~

svn co https://svn.filezilla-project.org/svn/FileZilla3/trunk filezilla

cd filezilla

autoreconf -i

./configure --with-tinyxml=builtin --disable-precomp

make



파일질라가 정상적으로 빌드되면 결과 파일은 src/interface/.libs에 저장됩니다. 그렇지만 실행파일이 생성된 폴더에서 프로그램을 바로 실행시키면 DLL 파일이 없다고 오류 메시지가 나올 것입니다. 정상적이라면 설치 과정을 통해서 필요한 파일을 복사하면 되지만 개발 과정이므로 아래와 같은 명령을 통해서 실행파일이 생성되는 곳에 필요한 파일들을 복사하면 프로그램을 정상 동작시킬 수 있습니다.

cp src/putty/.libs/fzputtygen.exe src/interface/.libs

cp src/putty/.libs/fzsftp.exe src/interface/.libs

cp /mingw/bin/libstdc++-6.dll src/interface/.libs

cp /mingw/bin/libgcc_s_dw2-1.dll src/interface/.libs


파일을 복사한 이후에 실행 파일이 생성된 디렉토리를 살펴보면 아래의 그림과 같습니다. 파일질라 실행 프로그램을 비롯하여 프로그램에 디버깅 정보가 포함되어 있어 크기가 크지만 배포할 목적이라면 strip 명령으로 해당 정보들을 제거하고 배포할 수 있습니다.


빌드한 프로그램을 실행한 결과는 아래와 같습니다. 버전 정보와 연관 라이브러리등을 확인할 수 있습니다.




댓글
댓글쓰기 폼