이 포스트는 FireBreath의 동영상 튜토리얼을 정리한 내용입니다.

아래 사전 설정의 프로그램들이 이미 설치되어 있어야 합니다.


사전 설정

1. git 설치

2. Python 설치

3. cmake 설치


튜토리얼 실행

1. FireBreath 가져오기

c:\code\tutorial>git clone https://github.com/firebreath/FireBreath.git --recursive -b firebreath-1.7


2. fbgen.py를 실행하여 FireBreath 플러그인 프로젝트 (TutorialTestPlugin) 생성

c:\code\tutorial>python.exe fbgen.py

Plugin Name []: Tutorial Test Plugin

Plugin Identifier [TutorialTestPlugin]:

Plugin Prefix [TTP]:

Plugin MIME type [application/x-tutorialtestplugin]:

Plugin Description []: Test plugin for the tutorial

Plugin has no UI [false]:

Company Name []: FireBreath Team Unicorporated

Company Identifier [FireBreathTeamUnicorporated]:

Company Domain [firebreathteamunicorporated.com]:


3. c:\code\tutorial\FireBreath\projects 에 생성된 TutorialTestPlugin 디렉토리를 C:\code\tutorial 로 이동


4. c:\code\tutorial\TutorialTestPlugin> 에서 다음을 실행

c:\code\tutorial\TutorialTestPlugin>git init .

c:\code\tutorial\TutorialTestPlugin>git add .

c:\code\tutorial\TutorialTestPlugin>git commit -m "Initial commit with just the project"

c:\code\tutorial\TutorialTestPlugin>git submodule add https://github.com/firebreath/FireBreath.git firebreath

c:\code\tutorial\TutorialTestPlugin>git submodule update --init --recursive


5. 사용할 VS 버전에 맞는 명령어 실행하여 VS 프로젝트 생성 (여기서는 VS 2010을 사용함)

c:\code\tutorial\TutorialTestPlugin>firebreath\prep2010.cmd . build


6. 생성된 VS 프로젝트 (build\FireBreath.sln) 실행

c:\code\tutorial\TutorialTestPlugin>start build\FireBreath.sln


7. TutorialTestPlugin 프로젝트 빌드


8. c:\code\tutorial\TutorialTestPlugin\build\bin\TutorialTestPlugin\Debug의 npTutorialTestPlugin.dll 을 COM에 등록 

c:\code\tutorial\TutorialTestPlugin>cd build\bin\TutorialTestPlugin\Debug

c:\code\tutorial\TutorialTestPlugin\build\bin\TutorialTestPlugin\Debug>regsvr32 npTutorialTestPlugin.dll


9. C:\code\tutorial\TutorialTestPlugin\build\projects\TutorialTestPlugin\gen\FBControl.htm 파일을 WebBrowser로 확인


10. 웹브라우저의 개발자 도구의 콘솔에서 다음 명령어들을 입력하여 확인 가능

> plugin().valid

  true

> plugin().echo("test text")

  "test text"

> plugin().echo([1,2,3,4,5])

  [1,2,3,4,5]

>


끝!

심볼파일에 소스 인덱싱을 하기 위해서 해야할 건 다 했는데 인덱싱이 안된다. (프로그램 설치 및 Path 지정, 파일 수정 등)


"zero source files found" 에러만 계속 뱉어내서 3일을 헤매다가 펄은 모르지만 그냥 분석해보기로 결정.


svnindex.cmd 는 svn.pm 을 호출하므로 이 파일을 열어봤다.


일반적으로 한글 지원을 위해 수정해야 하는 것으로 알고 있는 부분은 Path: 와 Revision: 이다.

m/^Path:[\s\t]*(.*)$/i

m/^Revision:[\s\t]*(\d*)$/i

이 부분을 다음과 같이 수정해야 한다.

m/^Path|^경로:[\s\t]*(.*)$/i

m/^Revision|^리비전:[\s\t]*(\d*)$/i

[m/정규표현식/i]는 다른 언어에서도 사용하는 방식의 정규표현식이라 한눈에 알아봤다.

'^'는 라인의 시작, '$'는 라인의 끝과 매치된다. (http://www.rubular.com/ 에서 아래쪽에 나오는 원문으로 확인 가능)

예전에는 [|경로, |리비전] 처럼 '^'를 추가하지 않아도 됐는데, 어느 순간부터 안 되어서 내가 수정했다.


그럼 이 정규표현식을 사용할 원문은 어디서 가져올까?

분명 svn.exe 명령어를 사용한 결과일 것이다.

$$self{'SVNCMD'} = "svn.exe";

...

open($hProcess, "$$self{'SVNCMD'} info -R \"$SourceRoot\"|")

이걸로 해당 명령어는 [svn.exe info -R "소스루트경로"] 임을 알 수 있다.

(사실 "|"가 뭔지 몰라서 넣어봤지만 명령 구문이 올바르지 않다고 한다)


커맨드창에서 해당 명령어를 입력해보니 정보가 쭉 나오는데, 다 볼 필요는 없을 것 같아서 Ctrl+C로 중단했다.

파일 하나의 출력을 보니 다음과 같았다.

경로: relative_path\source_file.c

이름: source_file.c

작업 사본의 루트 경로: C:\absolute_path

URL: http://source_server_url/svn/XXX/trunk/relative_path\source_file.c

저장소 루트: http://source_server_url/svn/XXX

저장소 UUID: 00000000-0000-0000-0000-000000000000

리비전: 863

노드 종류: 파일

스케쥴: 일반

마지막 수정 작업자: ldevil63

마지막 수정 리비전: 852

마지막 수정 일자: 2012-12-06 17:23:34 +0900 (2012-12-06, 목)

마지막 내용 수정 일자: 2013-01-03 10:51:37 +0900 (2013-01-03, 목)

체크섬: 28ea7d26eac7015034cc15075cd11faa630f5646


여기서 출력 결과가 한글이기 때문에 위에서 처럼 정규표현식 구문을 수정했던 것이다.

svn.exe가 영문이라면 경로:Path:로, 리비전:Revision:으로 출력된다.


pdb 파일을 텍스트 에디터로 열어서 확인해보면 소스 경로는 절대경로로 입력되어 있다. (srctool.exe를 사용해도 확인 가능)

하지만 여기서 찾은 경로 값은 상대경로이다.


예전에 잘 되었을 때의 pdb 파일을 열어보니 다음과 같은 식으로 입력되어 있다.

C:\absolute_path\relative_path\source_file.c*http://source_server_url/*svn/XXX/trunk/relative_path\source_file.c*863

이것도 절대경로...


그런데 svn.pm에서 위 부분을 삽입하는 부분은 조금 이상하다.

@{$$self{'FILE_LOOKUP_TABLE'}{lc $LocalFile}} = ( { }, "$LocalFile*$FileRepository*$FileRelative*$FileRevision");

앞 부분은 잘 모르겠고, 뒤의 변수들 값을 찾아보니, 다른 건 다 일치하는데 $LocalFile은 상대경로였다.

if ( $curline =~ m/^Path|^경로:[\s\t]*(.*)$/i ) {

    $LocalFile = lc $1;

    ...

}

참고로 $1은 정규표현식에서 매칭된 문자열의 첫번째 괄호 부분이다.

따라서 제일 처음의 "relative_path\source_file.c" 이다.


절대경로로 변경해서 해보려고 svn.pm 파일을 수정하였다. (일부만 발췌)

my $LocalFile;

my $LocalFilePathRelative;

my $LocalFilePathAbsolute;

...

if ( $curline =~ m/^(Path|경로):[\s\t]*(.*)$/i ) {

    $LocalFilePathRelative = lc $2;

    ...

    # Parse Working Copy Path

    if ( $curline =~ m/^(Working Copy Root Path|작업 사본의 루트 경로):[\s\t]*(.*)$/i ) {

        $LocalFilePathAbsolute = lc $2;

        $LocalFile = $LocalFilePathAbsolute . "\\" . $LocalFilePathRelative;

    }

}


절대경로로 변경하고 나니 잘된다 ㅋㅋ

=========================================================================================================================================

하다보니 또 안되는 경우가 생겼다.

svn info 명령을 실행하는 위치가 작업 사본의 루트이면 경로: 의 값이 상대경로로 나오고, 그 외에는 다음처럼 절대경로로 나온다.

경로: C:\absolute_path\relative_path\source_file.c

이름: source_file.c

작업 사본의 루트 경로: C:\absolute_path

URL: http://source_server_url/svn/XXX/trunk/relative_path\source_file.c

저장소 루트: http://source_server_url/svn/XXX

저장소 UUID: 00000000-0000-0000-0000-000000000000

리비전: 863

노드 종류: 파일

스케쥴: 일반

마지막 수정 작업자: ldevil63

마지막 수정 리비전: 852

마지막 수정 일자: 2012-12-06 17:23:34 +0900 (2012-12-06, 목)

마지막 내용 수정 일자: 2013-01-03 10:51:37 +0900 (2013-01-03, 목)

체크섬: 28ea7d26eac7015034cc15075cd11faa630f5646


절대경로의 루트부분이 중복되어 입력되어 다음과 같은 이상한 경로가 입력된다.

C:\absolute_pathC:\absolute_path\relative_path\source_file.c

따라서 소스 위치가 아닌 곳에서 소스 인덱싱을 하는 경우에는 정상동작을 하지 않을 것이다.


아래와 같이 작업 사본의 루트 경로 위치에 따라 입력하도록 svn.pm을 다시 수정하였다.

    # Parse Working Copy Path

    if ( $curline =~ m/^(Working Copy Root Path|작업 사본의 루트 경로):[\s\t]*(.*)$/i ) {

        $LocalFilePathAbsolute = lc $2;

        if ( index ($LocalFilePathRelative, $LocalFilePathAbsolute) != -1)  {

            $LocalFile = $LocalFilePathRelative;

        } else {

            $LocalFile = $LocalFilePathAbsolute . "\\" . $LocalFilePathRelative;

        }

    }

첨부된 파일은 다시 수정된 svn.pm 파일이다.

svn.pm


이상 기록 끝.


=========================================================================================================================================

다른 회사에서 해봤더니 또 안되는 경우가 발생!

삽질 엄청 하다가 알아낸 결론은... GIt 때문이었다.

망할 Git 의 bin 디렉토리에 perl.exe가 있어서 발생한 오류 ㅠ_ㅠ 

Git 을 설치했다면 Path에 ActivePerl 의 경로가 앞에 오도록 설정해주면 된다.



calc : 계산기
charmap : 문자표
cleanmgr : 디스크 정리
clipbrd : 클립보드에 복사된 내용 표시
cmd : 명령 프롬프트
sysedit : 시스템 구성 유틸리티의 실행 목록을 편집
desk.cpl : 디스플레이
dxdiag : 다이렉트 x 및 시스템 정보
eudcedit : 사용자정의 문자 편집기
explorer : 윈도우 탐색기
maqnify : 돋보기
mobsync : 동기화
mmc.exe : 콘솔 루터
msconfig : 시스템 구성요소 유틸리티
msinfo32 : 시스템 정보
mspaint : 그림판
notepad : 메모장
osk : 화상키보드
recent : 최근 사용 문서
regedit : 레지스트리 편집기
system.ini : 시스템 구성 편집기
taskmgr.exe : 작업관리자
telephon.cpl : 전화 및 모뎀 옵션
timedate.cpl : 날짜 및 시간
winver : 윈도우 버젼 확인
wmplayer : 윈도우 미디어 플레이어
wordpad : 워드패드

제어판 관련
access.cpl : 내게 필요한 옵션
appwiz.cpl : 프로그램 추가/제거
control : 제어판
control admintools : 관리 도구
control userpasswords : 사용자 계정
control userpasswords2 : 사용자 계정(고급)
hdwwiz.cpl : 새 하드웨어 추가
intl.cpl : 국가 및 언어 옵션
joy.cpl : 게임 컨트롤러
main.cpl : 마우스
mmsys.cpl : 사운드 및 오디오 장치
ntbackup : 백업 및 복원 마법사
powercfg.cpl : 전원 옵션
sysdm.cpl : 시스템 등록정보
wscui.cpl : 보안센터

네트워크 관련
inetcpl.cpl : 인터넷 옵션
mstsc : 원격 데스크톱 연결
netstat : 열린 포트와 TCP / IP 프로토콜 정보
ncpa.cpl : 네트워크 연결
ping 주소 : 핑 테스트
telnet open 주소 : 텔넷 접속
ipconfig : ip주소 확인

======================
언어 언어(국가) ANSI OEM
======================
Afrikaans   Afrikaans      1252  850
Albanian   Albanian      1250  852
Arabic    Arabic (Algeria)    1256  720
Arabic    Arabic (Bahrain)    1256  720
Arabic    Arabic (Egypt)     1256  720
Arabic    Arabic (Iraq)     1256  720
Arabic    Arabic (Jordan)     1256  720
Arabic    Arabic (Kuwait)     1256  720
Arabic    Arabic (Lebanon)    1256  720
Arabic    Arabic (Libya)     1256  720
Arabic    Arabic (Morocco)    1256  720
Arabic    Arabic (Oman)     1256  720
Arabic    Arabic (Qatar)     1256  720
Arabic    Arabic (Saudi Arabia)   1256  720
Arabic    Arabic (Syria)     1256  720
Arabic    Arabic (Tunisia)    1256  720
Arabic    Arabic (U.A.E.)     1256  720
Arabic    Arabic (Yemen)     1256  720
Armenian   Armenian      0   1
Azeri (Cyrillic) Azeri (Cyrillic)    1251  866
Azeri (Latin)  Azeri (Latin)     1254  857
Basque    Basque       1252  850
Belarusian   Belarusian      1251  866
Bulgarian   Bulgarian      1251  866
Catalan    Catalan       1252  850
Chinese    Chinese (Hong Kong S.A.R.)  950   950
Chinese    Chinese (Macau S.A.R.)   950   950
Chinese    Chinese (PRC)     936   936
Chinese    Chinese (Singapore)    936   936
Chinese    Chinese (Taiwan)    950   950
Croatian   Croatian      1250  852
Czech    Czech       1250  852
Danish    Danish       1252  850
Divehi    Divehi       0   1
Dutch    Dutch (Belgium)     1252  850
Dutch    Dutch (Netherlands)    1252  850
English    English (Australia)    1252  850
English    English (Belize)    1252  850
English    English (Canada)    1252  850
English    English (Caribbean)    1252  850
English    English (Ireland)    1252  850
English    English (Jamaica)    1252  850
English    English (New Zealand)   1252  850
English    English (Philippines)   1252  437
English    English (South Africa)   1252  437
English    English (Trinidad)    1252  850
English    English (United Kingdom)  1252  850
English    English (United States)   1252  437
English    English (Zimbabwe)    1252  437
Estonian   Estonian      1257  775
Faroese    Faroese       1252  850
Farsi    Farsi       1256  720
Finnish    Finnish       1252  850
French    French (Belgium)    1252  850
French    French (Canada)     1252  850
French    French (France)     1252  850
French    French (Luxembourg)    1252  850
French    French (Monaco)     1252  850
French    French (Switzerland)   1252  850
FYRO    Macedonian FYRO Macedonian  1251  866
Galician   Galician      1252  850
Georgian   Georgian      0   1
German    German (Austria)    1252  850
German    German (Germany)    1252  850
German    German (Liechtenstein)   1252  850
German    German (Luxembourg)    1252  850
German    German (Switzerland)   1252  850
Greek    Greek       1253  737
Gujarati   Gujarati      0   1
Hebrew    Hebrew       1255  862
Hindi    Hindi       0   1
Hungarian   Hungarian      1250  852
Icelandic   Icelandic      1252  850
Indonesian   Indonesian      1252  850
Italian    Italian (Italy)     1252  850
Italian    Italian (Switzerland)   1252  850
Japanese   Japanese      932   932
Kannada    Kannada       0   1
Kazakh    Kazakh       1251  866
Konkani    Konkani       0   1
Korean    Korean       949   949
Kyrgyz    Kyrgyz (Cyrillic)    1251  866
Latvian    Latvian       1257  775
Lithuanian   Lithuanian      1257  775
Malay    Malay (Brunei Darussalam)  1252  850
Malay    Malay (Malaysia)    1252  850
Marathi    Marathi       0   1
Mongolian   Mongolian (Cyrillic)   1251  866
Norwegian(Bokmal) Norwegian (Bokmal)    1252  850
Norwegian(Nynorsk) Norwegian (Nynorsk)    1252  850
Polish    Polish       1250  852
Portuguese   Portuguese (Brazil)    1252  850
Portuguese   Portuguese (Portugal)   1252  850
Punjabi    Punjabi       0   1
Romanian   Romanian      1250  852
Russian    Russian       1251  866
Sanskrit   Sanskrit      0   1
Serbian (Cyrillic) Serbian (Cyrillic)    1251  855
Serbian (Latin)  Serbian (Latin)     1250  852
Slovak    Slovak       1250  852
Slovenian   Slovenian      1250  852
Spanish    Spanish (Argentina)    1252  850
Spanish    Spanish (Bolivia)    1252  850
Spanish    Spanish (Chile)     1252  850
Spanish    Spanish (Colombia)    1252  850
Spanish    Spanish (Costa Rica)   1252  850
Spanish    Spanish (Dominican Republic) 1252  850
Spanish    Spanish (Ecuador)    1252  850
Spanish    Spanish (El Salvador)   1252  850
Spanish    Spanish (Guatemala)    1252  850
Spanish    Spanish (Honduras)    1252  850
Spanish    Spanish (International Sort) 1252  850
Spanish    Spanish (Mexico)    1252  850
Spanish    Spanish (Nicaragua)    1252  850
Spanish    Spanish (Panama)    1252  850
Spanish    Spanish (Paraguay)    1252  850
Spanish    Spanish (Peru)     1252  850
Spanish    Spanish (Puerto Rico)   1252  850
Spanish    Spanish (Traditional Sort)  1252  850
Spanish    Spanish (Uruguay)    1252  850
Spanish    Spanish (Venezuela)    1252  850
Swahili    Swahili       1252  437
Swedish    Swedish       1252  850
Swedish    Swedish (Finland)    1252  850
Syriac    Syriac       0   1
Tamil    Tamil       0   1
Tatar    Tatar       1251  866
Telugu    Telugu       0   1
Thai    Thai       874   874
Turkish    Turkish       1254  857
Ukrainian   Ukrainian      1251  866
Urdu    Urdu       1256  720
Uzbek (Cyrillic) Uzbek (Cyrillic)    1251  866
Uzbek (Latin)  Uzbek (Latin)     1254  857
Vietnamese   Vietnamese      1258  1258
# n | a
  - a는 n의 배수이다.
 
# a mod n
  - a를 n으로 나누었을 때 나머지 값
 
# a ≡ b mod n
  - a와 b는 n으로 나누었을 때 그 나머지가 같다. (a와 b는 합동이다)
 
# 모듈러 연산의 특성
  - a ≡ b mod n 이면, a - b는 n의 배수이다. -> (a - b) mod n = 0
  - mod n = Zn = { 0, 1, ..., n - 1 }
 
# 모듈러 연산 법칙
  - [(a mod n) + (b mod n)] mod n = (a + b) mod n
  - [(a mod n) - (b mod n)] mod n = (a - b) mod n
  - [(a mod n) x (b mod n)] mod n = (a x b) mod n
 
# Galois Fields - GF(p) [아직 명확히 이해 못함. 위수가 단순히 원소의 개수인 것인지... 유한체는 뭔지...]
  - 소수 p에 대하여 위수가 p인 유한체
  - GF(p)는 정수 { 0, 1, ..., p-1 }의 집합 Zp로 정의
  - p가 소수이므로 Zn상의 모든 정수들에 대해 곱셈의 역원이 존재함

회사에서 세미나하는 내용인데 번개같이 넘어가는 바람에 뭔말인지 모르겠어요. ㅋㅋㅋ
이해도 할겸 복습하며 예문 위주로 정리합니다.
내가 이해한대로 정리한거라 틀릴수도 있으니 책임은 못 집니다.

# GCD(a, b) : a와 b의 최대 공약수 (Gratest Common Divisor)
ex) GCD(49, 21) = 7

# 서로소 : GCD(a, b) = 1 인 정수 a와 b를 서로소라 한다
ex) GCD(5, 7) = 1
ex) GCD(6, 11) = 1
ex) GCD(10, 21) = 1

# 소수 : 1 과 자신만으로 나누어지는 1보다 큰 양의 정수
ex) 2, 3, 5, 7, 11, 13, ...

# 합성수 : 소수가 아닌 양의 정수 (1과 자신 이외에 다른 값으로 나누어지는 자연수)
ex) 4, 6, 8, 9, 10, 12, 14, 15, ...

# 모든 정수(n > 1)는 소수의 곱만으로 표현할 수 있으며, 순서를 무시한다면 그 표현방법은 유일하다.
ex) 15 = 3 x 5
ex) 50 = 2 x 25 = 2 x 5 x 5
ex) 100 = 2 x 50 = 2 x 2 x 5 x 5

# 유클리드 알고리즘 : a = bq + r 이면 GCD(a, b) = GCD(b, r)
ex) 49 = 28 x 1 + 21 -> GCD(49, 28) = GCD(28, 21)
ex) 54 = 14 x 3 + 12 -> GCD(54, 14) = GCD(14, 12)
~ a를 b로 나눈 나머지(r)는 항상 최대 공약수의 배수이다. 따라서 b와 r의 최대공약수도 동일하다.

# 유클리드 호제법(互除法 : 번갈아가며 제거하는 방법)
- 유클리드 알고리즘을 반복적으로 적용하여 최대공약수를 구하는 방법
ex) 나머지가 0 이면 작은 값이 최대 공약수 

GCD(1020, 790) 1020 = 1 x 790 + 230
GCD(790, 230) 790 = 3 x 230 + 100
GCD(230, 100) 230 = 2 x 100 + 30
GCD(100, 30) 100 = 3 x 30 + 10
GCD(30, 10) 30 = 3 x 10 + 0

# 베주의 정의 (bezout's identity)
- 동시에 0이 아닌 두 정수 a, b에 대해서 GCD(a, b) = ax + by를 만족하는 정수 x, y가 존재한다.

# 확장 유클리드 알고리즘 : 베주의 정의 GCD(a, b) = ax + by의 해(x, y)를 구하는 방법
- 위 유클리드 호제법 풀이의 나머지 값 외에는 a, b를 대입할 수 있다.
- 이를 이용해 나머지가 최소공약수가 될 때 까지 나머지를 a와 b로 표현하는 방식으로 정리한다.
ex) 위 유클리드 호제법을 사용한 예제. 위 호제법 풀이의 오른쪽 풀어놓은 식에 대입
1020 = 1 x 790 + 230 (위 유클리드 호제법의 풀이에서 가져온 식)
-> a = 1 x b + 230 [각주:1]
-> 230 = a - (1 x b) = a - b [각주:2]
-> 따라서, 230 = a - b
790 = 3 x 230 + 100 (위 유클리드 호제법의 풀이에서 가져온 식)
-> b = 3 x (a - b) + 100 [각주:3]
-> 100 = b - (3 x (a - b)) = b - (3a - 3b) = -3a + 4b [각주:4]
-> 따라서, 100 = -3a + 4b
230 = 2 x 100 + 30 (위 유클리드 호제법의 풀이에서 가져온 식)
-> a - b = 2 x (-3a + 4b) + 30 [각주:5]
-> 30 = a - b - (2 x (-3a + 4b) = a - b - (-6a + 8b) = 7a - 9b [각주:6]
-> 따라서, 30 = 7a - 9b
100 = 3 x 30 + 10 (위 유클리드 호제법의 풀이에서 가져온 식)
-> -3a + 4b = 3 x (7a - 9b) + 10 [각주:7]
-> 10 = -3a + 4b - (3 x (7a -9b)) = -3a + 4b - (21a - 27b) = -24a + 31b [각주:8]
-> 따라서, 10 = -24a + 31b

10 은 GCD(1020, 790)의 해, 즉 최대공약수이므로 a와 b에 원래의 값을 대입하면
-> GCD(1020, 790) = -24 x 1020 + 31 x 790
-> a = 1020, b = 790 일 경우 GCD(a, b) = ax + by 를 만족하는 x와 y는
x = -24, y = 31

확인 : 1020 x -24 + 790 x 31 = -24480 + 24490 = 10

  1. 1020 = a, 790 = b [본문으로]
  2. 호제법의 나머지인 230을 기준으로 정리 [본문으로]
  3. 790 = b, 230 = a - b [본문으로]
  4. 호제법의 나머지인 100을 기준으로 정리 [본문으로]
  5. 230 = a - b, 100 = -3a + 4b [본문으로]
  6. 호제법의 나머지인 30을 기준으로 정리 [본문으로]
  7. 100 = -3a + 4b, 30 = 7a - 9b [본문으로]
  8. 호제법의 나머지인 10을 기준으로 정리 [본문으로]
1.  http://sourceforge.net/projects/stlport/ 에서 STLport-5.2.1.tar.bz2 를 받는다.
2. 적당한 위치에 압축을 풀고 커맨드 창을 연다. (설명을 위해
 c:\stlport 에 푼 것으로 가정함)
3. Visual C++ 6.0 이 설치된 디렉토리 (C:\Program Files\Microsoft Visual Studio\VC98\Bin) 에서 VCVARS32.BAT 를 입력해서 환경설정을 해준다.

C:\Program Files\Microsoft Visual Studio\VC98\Bin>VCVARS32.BAT

4. c:\stlport\로 이동한다.

C:\Program Files\Microsoft Visual Studio\VC98\Bin>cd c:\stlport

5. configure를 실행한다. (configure --help 를 입력해보면 도움말이 나오니 참고)

C:\stlport>configure --help
C:\stlport>configure msvc6

6. c:\stlport\build\lib 로 이동하여 nmake clean install 을 입력한다.

C:\stlport>cd build\lib
C:\stlport\build\lib>nmake clean install

7. c:\stlport\build\test\unit 으로  이동하여 nmake clean install 을 입력한다. 

C:\stlport\build\lib>cd ..\test\unit
C:\stlport\build\test\unit>nmake clean install

8. 7번 과정에서 에러가 발생하는데 해당 위치의 테스트 코드가 잘못되어 있다.
 - test\unit\ctype_facets_test.cpp 파일의 430 라인을 다음과 같이 변경한 후 다시 7을 수행한다.

CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '?) );

CPPUNIT_ASSERT( ct.is(ctype_base::mask(ctype_base::print | ctype_base::lower | ctype_base::alpha), '?') );

9. Visual C++ 의 Options -> Directories 에서 Include files의 최상단에  c:\stlport\stlport 경로를 추가하고, Library files에 c:\stlport\lib 경로를 추가한다.

참고 자료
STLport의 빠른 설치 가이드
- Visual Studio 6.0에 STLport 5.2.1 설치
- STLport 설치 및 사용 For VC6
- STLport와 boost를 VS.NET 2005에서 사용하기
- Visual C++ 2005에서 STLport 5.1.0 빌드
GDB 명령어에 대해 정리한 자료
http://freemmer.tistory.com/31
오늘 Doxygen을 다시 설치하면서 전에 겪었던 한글 깨지는 문제를 또다시 겪었다.
인터넷을 뒤져보니 다 정확하지 않은 답 뿐이다. 백날 DOXYGEN_ENCODING 값을 바꿔봤자 소용없더라... ㅡㅡ;

현재 버전에서 바뀐건지는 모르지만 소스 내용이 한글로 표현되게 하려면 DOXYGEN_ENCODING가 아니라 expert의 input에 들어가서 바꿔야 한다. EUC-KR로.

Visual Studio 에서는 기본적으로 소스파일의 인코딩이 EUC-KR로 되어있다. CP949로 해도 동일하지 싶으다.

아이폰이라 쓰기 힘드네... 자세한건 시간 생기면 그때.

iPhone 에서 작성된 글입니다.

원래 어설펐지만

너를 좋아했던 그때에

제일 어설펐던거 같아

나를 다 보여주지 못해서 미안,



출처 : 해온's 싸이 (http://www.cyworld.com/nerocoke)

너를 알려라~ 해온!

+ Recent posts