ultra edit + ctags

UltraEdit-32 와 ctags 사용
==================================================

UltraEdit를 설치한후 ctags (http://ctags.sourceforge.net)에서
ctags.exe를 울트라에디트 설치 폴더에 놓는다.

프로젝트/CTag 옵션에서

-f %fo -R D:\bro\study\u-boot

마지막 인자로 자신의 프로젝트 폴더를 놓으면 된다.

그리고 원하는 심볼에서 F11을 누르면 태그를 찾는다.

태그를 찾고 뒤로 가기 위해서

고급/설정/키정의에서

검색 뒤로 를 Shift+F11로 연결하면 편리하게 쓸 수 있다.

원문: http://neri.cafe24.com/menu/bbs/view.php?id=kb&page=5&sn1=&divpage=1&category=3&sn=off&ss=on&sc=on&select_arrange=hit&desc=asc&no=221&PHPSESSID=d59cade76d929b2521f7ac8dd2cc7519

Advertisements

do while(0) MACRO

#define MACRO do { printf(“first”); printf(“second”); } while(0)

소스코드를 보다 보면,  위와  같은 소스코드를 볼 수 있습니다.

조건문 if … else … 문에서

중괄호를 사용하지 않는 분들이 위의 매크로를 사용하지 않고,

#define MACRO printf(“first”); printf(“second”);

이렇게 정의된 매크로를 사용한다면,

if( 조건 )

MACRO;

else

printf(“third”);

위와같은 소스코드를 실행할 때, else에서 문법 에러가 납니다.

(illegal else without matching if 에러가 나지요…)

한 문장인것 처럼 중괄호로 묶어주면 되려나?

하고서 아래와 같이 매크로를 정의하면

#define MACRO { printf(“first”); printf(“second”); }

MACRO 뒤의 세미콜론이 문제가 되어 역시 else에서 문법 에러가 나지요…

(역시 같은 illegal else without matching if 에러가 납니다.)

그래서

#define MACRO do { printf(“first”); printf(“second”); } while(0) 식의

do while(0) 매크로를 쓴다고 하네요^^

한 번은 실행되면서, 영역도 구성이 되고, 매크로 상수 뒤의 세미콜론까지 처리할 수 있는

좋은 방법이니까요^^

원문 http://guntn.blog.me/100045877821

vi editor – set dos mode, unix mode

*** 검색어: nabiro, vi, dos, unix, mode, 모드, ^M, 컨트롤M, Ctrl + M

vi 편집기로 작업 완료해서 UNIX에 업로드 하면 가끔 특정 파일의 라인끝에 ^M 문자가 붙는 경우가 있습니다.
이것은 윈도우에서 편집하여 저장할 때 DOS 모드로 저장이 되어 모든 라인의 끝 (엔터키를 친곳)에 CR/LF가 붙기
때문입니다.

유닉스에서는 CR 이던가 LF 이던가 하나만 엔터(Line feed)로 인식하여 ^M 문자가 라인 끝에 붙게 됩니다.

이를 막기 위해서는 윈도우의 vi 에디터에서 파일을 저장할 때 UNIX 모드로 저장해야 합니다.
유닉스 모드로 변경하는 명령어는 아래와 같습니다.

set fileformat=unix

DOS 모드는

set fileformat=dos

위 명령어를 적용한 후 저장하면 각각의 모드로 저장됩니다.

 

출처:  http://nabiro.tistory.com/entry/vi-%EC%97%90%EB%94%94%ED%84%B0%EC%97%90%EC%84%9C-DOS-%EB%AA%A8%EB%93%9C-UNIX-%EB%AA%A8%EB%93%9C-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

open ssl vc build

http://greenfishblog.tistory.com/81

다른 Open Source등에서 OpenSSL을 사용하는 경우가 많습니다.
그래서, OpenSSL의 빌드가 필요한 경우가 많은데, VC9.0에서 빌드하는 방법을 알려드립니다.

VC9.0 재배포팩이 필요한 dll 버전과 재배포팩과 다른 의존성 없이 독단적으로 빌드 가능한 버전 2개를 공유합니다.

1) OpenSSL Source 다운로드
http://www.openssl.org/source/
(1.0.0d 버전을 기준으로 작성되었습니다.)

2) 빌드 머신에 Active Perl 설치
http://www.activestate.com/activeperl/downloads

3) 임의의 경로에 openssl 압축 해제
예) D:\Src\openssl-1.0.0d

4) 몇몇 파일을 unicode로 수정하여 저장
openssl-1.0.0d/crypto/x509v3/v3_pci.c
openssl-1.0.0d/crypto/x509v3/v3_pcia.c

5) openssl-1.0.d 경로에 첨부된 두 파일을 복사
openssl-1.0.0d/_build.bat
openssl-1.0.0d/_build.static.bat

6) _build.bat / _build.static.bat 실행

7) openssl-1.0.0d/build 와 openssl-1.0.0d/build.static에 빌드본 완료

8) openssl-1.0.0d/build/bin/openssl.exe

와 같기 때문에 VC9.0 재배포팩과 같은 경로의 SSLEAY32.DLL와 LIBEAY32.DLL가 필수

9) openssl-1.0.0d/build.static/bin/openssl.exe

와 같기 때문에, openssl.exe 단독으로 배포 가능함

10) openssl-1.0.0d/build.static/lib에는 다른 프로젝트에서 끌어다 쓸 수 있는 lib가 들어감

open oauth and openssl and curl vc build

http://greenfishblog.tistory.com/82

제목 처럼, oauth+openssl+curl 삼종 세트를 함께 빌드하는 방법을 공유합니다.
일단, oauth, openssl, curl 코드가 부분 수정된 것이 첨부파일에 포함되었는데,
해당 오픈소스 재배포에 대해 라이센스 위반이 있다면, 당장 첨부 파일을 삭제하도록 하겠습니다.
(본 블로그에 대해 CCL : 상업적 이용(Off), 컨텐츠 변경(Off) 입니다.)

일단, 기준 컴파일러는 VC9.0(Visual Studio 2008)이며,
빌드 & 링크 환경은 재배포팩 설치없는 버전으로 하였습니다.
그래서, 이와 같이 사용하는 경우, 바이너라 크기는 조금 커 질 수 있으나,
재배포팩 설치 Dependecy를 제거 했기 때문에, 배포가 좀더 용이해 질 것입니다.

즉, curl+openssl인 경우, 자체적인 dependency 때문에, 실행 경로등에 libeay32.dl과 같은 파일이
있어야만 동작하는 경우가 많습니다. 이런 암묵적인 dll 사용 대신, 정적 library로 링크하여,
단일 파일만으로 실행 가능토록하기 위한 빌드 방법을 공유합니다.
물론, VC9.0에서 빌드하여 자체적으로 발생하는 재배포팩 의존성 또한 제거합니다.

1) 다음과 같이 다운로드 & 압축 해제

curl : http://curl.haxx.se/download.html 의 Win32-MSVC 항목 다운로드
liboauth : http://liboauth.sourceforge.net/ 의 Download 항목 다운로드
openssl-1.0.0d : http://www.openssl.org/source/ 의 최신 항목 다운로드

2) openssl 빌드 준비
2011/03/10 – [Research/Etc] – OpenSSL VC9.0에서 빌드하기 참고

3) curl 빌드 준비
3-1) curl-7.21.4/lib/libcurl.vcproj 를 열면, libcurl.sln 파일이 생성된다.
3-2) 프로젝트 세팅->C/C++->Code Generation
에 Release는 Multi-Threaded (/MT)로, Debug는 Multi-Threaded DLL (/MD)로
설정한다.

3-3) curl-7.21.4/include/curl/curl.h를 다음과 같이 수정


#if defined(BUILDING_LIBCURL)
#define CURL_EXTERN
#else
#define CURL_EXTERN
#endif
#else

3-4) curl-7.21.4/include/curl/easy.h, memdebug.h를 다음과 같이 수정
CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2);
==>
int (curl_strequal)(const char *s1, const char *s2);
와 같이 CURL_EXTERN 사용한 부분 삭제

4) liboauth 빌드 준비
4-1) liboauth-0.9.4/src/*.c -> *.cpp 로 rename
4-2) liboauth-0.9.4/src/oauth_http.cpp
#define OAUTH_USER_AGENT “liboauth-agent/” VERSION
==>
#define OAUTH_USER_AGENT “liboauth-agent/” LIBOAUTH_VERSION
로 수정
4-3) liboauth-0.9.4/src/xmalloc.cpp
char *xstrdup (const char *s) {
void *ptr = xmalloc(strlen(s)+1);
strcpy (ptr, s);
return (char*) ptr;
}
==>
char *xstrdup (const char *s) {
void *ptr = xmalloc(strlen(s)+1);
strcpy ((char*)ptr, s);
return (char*) ptr;
}
로 수정

5) 아래 경로에 build.depend.bat batch 파일 추가

@echo off
call “%VS90COMNTOOLS%vsvars32.bat”
echo *********************************
echo * Curl Build                    *
echo *********************************
devenv.com .\curl-7.21.4\lib\libcurl.sln /Build “Release|Win32”
echo *********************************
echo * OpenSSL Build                 *
echo *********************************
cd openssl-1.0.0d
call _build.static.bat
cd ..

아래 경로에 추가

6) build.depend.bat를 실행
위 batch 파일 실행후 아래 파일이 있는가?
./curl-7.21.4/lib/release/libcurl.lib
./openssl-1.0.0d/build.static/lib/libeay32.lib
./openssl-1.0.0d/build.static/lib/ssleay32.lib

7) 사용할 모듈 프로젝트에 위 경로를 다음과 같이 복사한다.

붉은색 box는 사용할 project 이름이며, depend라는 경로를 만든뒤, 1)과 5)에서 만든 경로를 복사한다.

8) 사용할 모듈 project의 프로젝트 세팅을 다음과 같이 수정한다.

8-1) C/C++->General->Additional Include Directories
를 아래 그림과 같이 추가한다.
depend/liboauth-0.9.4/src, depend/openssl-1.0.0d/inc32, depend/curl-7.21.4/include

8-2) C/C++->Preprocessor->HAVE_OPENSSL_HMAC_H, HAVE_CURL, CURL_STATICLIB 추가

8-3) C/C++->Code Generation->Runtime Library를 /MT(Release), /MTD(Debug)로 변경한다. (3-2 참고)
(만일, 배포시에 재배포팩이 설치되었다고 가정한다던지, 혹은 private assembly등을 이용한 경우,
8-3, 3-2 과정은 생략 가능하다.)

8-4) Linker->Additional Dependencies에 아래 항목을 추가한다.
libcurl.lib / ws2_32.lib / winmm.lib / wldap32.lib / libeay32.lib / ssleay32.lib

8-5) Linker->General->Additional Library Directory를 다음과 같이 추가한다.

depend/curl-7.21.4/lib/release, depend/openssl-1.0.0d/build.static/lib

9) 사용할 바이너리에 다음과 같이 파일을 추가한다.

즉, ./depend/liboauth-0.9.4/src에 있는 .cpp 파일을 통으로 가져옵니다.

10) liboauth를 사용한다.

# include “oauth.h”

VOID Test(VOID)
{
oauth_sign_url2(…);
}

위와 같이 설정하고 빌드한 바이너리는 재배포팩 없이 독립적으로 실행되는 바이너리가 생성됩니다.
dependency walker등으로 확인해도 단일 바이너리만 있어도 됩니다. (물론, 8-3 과정을 수행한 경우)

11) 참고
위와 같은 경우 https://와 같은 HTTPS 프로토콜은 기본적으로 지원되지 않습니다.
만일 oauth에서 HTTPS를 사용하는 경우, libcurl 빌드 설정을 변경해야 합니다. (3) curl 빌드 준비 참고)
Additional include에 ..\..\openssl-1.0.0d\inc32가 추가되어야 하며,
Preprocessor에 ;USE_SSL;USE_OPENSSL;USE_SSLEAY를 추가하면 https를 지원하게 됩니다.