프로그래밍/Visual C2009/05/11 19:45

1. 설치 환경
    Visual Studio 2008, WinXP

2. 설치 준비
    OpenSSL 소스 다운로드 : http://www.openssl.org/source(새 창으로 열기)
    ActivePerl 다운로드       : http://www.activestate.com/activeperl(새 창으로 열기)
   
    > ActivePerl 설치
    > OpenSSL 소스 압축 해제

3. 시작 > 실행 > cmd
    > OpenSSL 폴더로 이동
    예) cd D:\My Project\OpenSSL\openssl-0.9.8k

4. OpenSSL Configure
    > perl Configure 옵션 VC-WIN32 --prefix=설치디렉토리
    예) perl Configure no-idea no-mdc2 no-rc5 VC-WIN32 --prefix="D:\My Project\OpenSSL"
        상용알고리즘 idea, mdc2, rc5 미설치.

5. Visual C++ 환경변수 로딩
    > C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat
   
6. Make 파일 생성
    > ms\do_masm

7. 소스 수정 
    > OpenSSL 폴더 (예: D:\My Project\OpenSSL\openssl-0.9.8k)에 있는 다음 파일을 수정한다.  
        crypto\cversion.c    105 Line
            return "OPENSSLDIR: \"" OPENSSLDIR "\"";
            =>
           
return "OPENSSLDIR: \" OPENSSLDIR \"";

        crypto\cryptlib.h    84-86 Line
            #define X509_CERT_DIR       OPENSSLDIR "/certs"
            #define X509_CERT_FILE      OPENSSLDIR "/cert.pem"
            #define X509_PRIVATE_DIR    OPENSSLDIR "/private"
            =>
            #define X509_CERT_DIR       OPENSSLDIR "\\certs
"
            #define X509_CERT_FILE      OPENSSLDIR "
\\cert.pem
"
            #define X509_PRIVATE_DIR    OPENSSLDIR "
\\private
"

        crypto\opensslconf.h    107-108 Line
            #define ENGINESDIR "D:\My Project\OpenSSL/lib/engines"
            #define OPENSSLDIR "D:\My Project\OpenSSL/ssl"
            =>
            #define ENGINESDIR "D:\\My Project\\OpenSSL\\lib\\engines"
            #define OPENSSLDIR "D:\\My Project\\OpenSSL\\ssl"


        crypto\x509v3\v3_pci.c
        crypto\x509v3\v3_pcia.c

            Visual C++ 2008에서 위 두파일은 연뒤
            파일 > 저장 고급 옵션 > 인코딩 > 유니코드(서명 있는 UTF-8) - 코드 페이지 65001
            로 저장한다

    > D:\My Project\OpenSSL\openssl-0.9.8k 와 같이 소스가 있는 폴더명에 공백이 포함되어 있는경우
       util/copy.pl 파일을 다음과 같이 수정
       
       util/copy.pl 15-26 Line
            foreach $arg (@ARGV) {
                if ($arg eq "-stripcr")
                    {
                    $stripcr = 1;
                    next;
                    }
                $arg =~ s|\\|/|g;    # compensate for bug/feature in cygwin glob...
                foreach (glob $arg)
                    {
                    push @filelist, $_;
                    }
            }
            =>
            foreach $arg (@ARGV) {
                if ($arg eq "-stripcr")
                    {
                    $stripcr = 1;
                    next;
                    }
                $arg =~ s|\\|/|g;    # compensate for bug/feature in cygwin glob...
                if (-d $arg)
                {
                    $arg="\"$arg\"";
                }
                foreach (glob $arg)
                    {
                    push @filelist, $_;
                    }
            }


8. 정적 라이브러리 컴파일 및 설치
    nmake -f ms\nt.mak
    nmake -f ms\nt.mak test
    namke -f ms\nt.mak install

     ※ 동적 라이브러리로 설치하고자 할경우 "namke -f ms\ntdll.mak"로 컴파일 및 설치한다.

2009/05/11 19:45 2009/05/11 19:45
Posted by 나그네
프로그래밍/Visual C2009/04/21 15:47

VS2008에서 컴파일 할경우 다음과 같은 오류 메세지가 출력됨.

1>------ 빌드 시작: 프로젝트: zlib, 구성: DLL ASM Debug Win32 ------
1>Assembling...
1> Assembling: D:\My Project\zlib-1.2.3\contrib\masmx86\inffas32.asm
1>D:\My Project\zlib-1.2.3\contrib\masmx86\inffas32.asm(647) : error A2070:invalid instruction operands
1>D:\My Project\zlib-1.2.3\contrib\masmx86\inffas32.asm(649) : error A2070:invalid instruction operands
1>D:\My Project\zlib-1.2.3\contrib\masmx86\inffas32.asm(663) : error A2070:invalid instruction operands
1>D:\My Project\zlib-1.2.3\contrib\masmx86\inffas32.asm(720) : error A2070:invalid instruction operands
1>Project : error PRJ0019: 도구에서 오류 코드를 반환했습니다. 위치: "Assembling..."
1>빌드 로그가 "file://D:\My Project\zlib-1.2.3\projects\visualc6\Win32_DLL_ASM_Debug\BuildLog.htm"에 저장되었습니다.
1>zlib - 오류: 1개, 경고: 0개
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========


※ 수정

inffas32.asm파일의 오류 위치를 다음과 같은 형식으로 변경
    원본 : movd mm7,[esi]
    수정 : movd mm7,dword ptr[esi]

2009/04/21 15:47 2009/04/21 15:47
Posted by 나그네
프로그래밍/기타2009/04/21 15:39

※ 오류 메세지

Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 229, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 104, in main
    result, resultmsgs = base.doCommands()
  File "/usr/share/yum-cli/cli.py", line 339, in doCommands
    self._getTs(needTsRemove)
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 101, in _getTs
    self._getTsInfo(remove_only)
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 112, in _getTsInfo
    pkgSack = self.pkgSack
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 591, in <lambda>
    pkgSack = property(fget=lambda self: self._getSacks(),
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 434, in _getSacks
    self.repos.populateSack(which=repos)
  File "/usr/lib/python2.4/site-packages/yum/repos.py", line 251, in populateSack
    sack.populate(repo, mdtype, callback, cacheonly)
  File "/usr/lib/python2.4/site-packages/yum/yumRepo.py", line 181, in populate
    dobj = repo_cache_function(xml, csum)
  File "/usr/lib/python2.4/site-packages/sqlitecachec.py", line 42, in getPrimary
    self.repoid))
TypeError: Parsing primary.xml error: Start tag expected, '<' not found


※ 조치 방법

# ldd /usr/lib/python2.4/site-packages/libxml2mod.so
        linux-gate.so.1 =>  (0x00c78000)
        libxml2.so.2 => /opt/lampp/lib/libxml2.so.2 (0x00110000)
        libc.so.6 => /lib/libc.so.6 (0x00211000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00e09000)
        libm.so.6 => /lib/libm.so.6 (0x00b40000)
        /lib/ld-linux.so.2 (0x00883000)

/usr/lib/libxml2.so.2를 참조 할 수 있도록
/etc/ld.so.conf 파일의 lib 경로 조절


 

2009/04/21 15:39 2009/04/21 15:39
Posted by 나그네