안녕하세요. 까막임돠~


Microsoft Visual Studio 를 이용하여 프로젝트를 생성하면, 프로젝트 폴더에

각종 더미성 파일들이 생성되지요.


이러한 파일이나 폴더를 한쪽에 몰아서, 소스 폴더를 깔끔하게 관리하는 방법은

인터넷에 많이 있는데, 가끔 까먹어서 자료로 남겨 봅니다.


아래는 MSDN을 참조하여, 파일 확장자 및 내용에 대한 정리를 한것 이구요.


주황색 비끄무리한 색은 아래 방법으로 처리합니다.

폴백 경로를 지정하지 않으면 %TEMP% 경로에 저장되구요, 물리 경로를 지정하면 해당 경로에 생성됩니다.


녹색 비슷한 색은 아래 방법으로 처리합니다.

Configuration 별로 모두 설정해야 합니다. 경로는 원하는 경로에 몰아서 처리 해주시면 됩니다.

(아래의 예시 경로는 다수의 프로젝트가 다중 depth 로 있어서, 상대 경로로 처리해준것 입니다.)

(상대 경로, 절대 경로 모두 사용할 수 있습니다.)


프로젝트를 위와 같은 방법으로 정리하면, 디버깅관련 파일과 각종 OBJ 파일들이 몽땅 다른 곳에 저장되기 때문에

프로젝트 폴더에는 빌드에 꼭 필요한 파일만 남게되어 소스관리툴 등과 연동할 때 편리합니다.



PS. 만약에 실행파일만 다른 경로에 모아서 관리하고 싶다면 다음과 같은 설정을 해주셔야 합니다.

우선 링커 옵션에 Output File 에 실행파일 경로을 넣어주시고요. (물론 Configuration 별로 다 해주셔야 하지요.)


실행파일 경로를 옮기면 디버거가 해당 위치를 못찾을 수 있기 때문에, 아래와 같이, 변경된 경로를 적어 주셔야 합니다.


소스 컴파일을 마치고, 필요한 프로젝트에 넣어서 사용하는데는 별 문제가 없지만..
역시나 문제가 생기면 디버깅을 해야죠.

ms\do_ms.bat 를 보시면 다음과 같이 나와있습니다.

perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def

위의 환경은 일반적인 디버깅이 빠진 상태의 메이크 파일을 만드는 과정이고..
아래와 같이 debug 라고 하는 키워드를 추가하시면 디버깅이 가능한 메이크 파일을 생성해 줍니다.

perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl dll debug no-asm VC-WIN32 >ms\ntdll.mak
perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def

저렇게 수정하신 후 command line 에서 ms\do_ms.bat 를 돌리시면 새로운 환경 설정이 적용된 ntdll.mak 파일 생성됩니다.
해당 파일을 열어 보시면 다음과 같이 바껴 있는걸 볼 수 있습니다.

CFLAG= /MDd /Od -DDEBUG -D_DEBUG /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DOPENSSL_USE_APPLINK -I. /Fdout32dll -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_CMS -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE    

일단 저렇게 만들어서 컴파일을 해보니 out32dll.dbg tmp32dll.dbg 처럼 디버깅용 폴더가 생기면서 필요한 파일이 작성됩니다.
그런데, 메뉴얼 대로 다 해서 소스와 물려 돌려봤는데, -_-??? 역시나 디버깅시 openssl 함수 호출부를 추적하면 내부로 못들어 가네요.

CFLAG= /nologo /MDd /W3 /Gm /GX /ZI /Od /I /FR"Debug/" -DDEBUG -D_DEBUG   -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DOPENSSL_USE_APPLINK -I. /Fdout32dll -DOPENSSL_NO_RC5  -DOPENSSL_NO_MDC2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_DYNAMIC_ENGINE -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_CMS -DOPENSSL_NO_CAPIENG -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED

위에 꺼는 이전에 맨땅에 해딩하면서 만들었던 (0.9.8b 버전 당시..) 내용을 추려서, 0.9.8i 버전에 맞도록 수정한 내용입니다.

이렇게 수정해 놓고, 다시 몽땅지우고 재컴파일 한 후, 새로 생성된 라이브러리와 dll을 복사해놓고.. 
작업 프로그램을 빌드 한 후, 소스 추적에 들어가니 ssl 소스로도 잘 추적이 들어가네요.. 

수고하세요..

PS. 다 만들어진 라이브러리를 작업하는 프로젝트에 첨부하고 빌드했을 때, unresolved external symbol 류의 에러가 발생하면
      ssleay32.def 에 해당 함수를 추가 하시면 됩니다. 참고로 ssleay32.def의  마지막 오디너리 넘버가 293번 이니까..
      294번 부터 추가하세요.. 그리고, openssl 을 다시 한번 빌드하셔서 복사하시고 사용하시면 됩니다.


 

+ Recent posts