C 5

C코드 파싱한 정보 분석

우연히 C코드의 AST는 어떻게 만들어 질까에 대해서 검색을 하다가 gcc의 파싱 정보를 보여주는 옵션을 발견하였다. [CODE type=C] int main() { int a=0; a++; return 0; } [/HTML][/CODE] #gcc -fdump-translation-unit hello.c 이 옵션을 주면 hello.c.tu 라는 파일이 생성되고 파싱된 정보를 기록합니다. 하지만 아직까지 파싱된 정보를 해석하는 방법은 잘 몰라요 ㅋㅋ 이외에 cpp 클래스를 분석하는 옵션도 있다. (hello.cpp가 있다고 가정할떄) #gcc -fdump-class-hierarchy hello.cpp 이옵션을 주면 hello.cpp.class라는 파일이 생성되고 클래스 상속관계를 보여준다. 이 놈도 아직 ..

Passion/Programming 2007.01.25

동적 라이브러리 만들기

동적 라이브러리 만들기는 정적 라이브러리 만들기와 매우 유사하다. 단지 컴파일 방법이 다르고, 내부 동작 메커니즘이 다를 뿐이다. 간단하게 hello, library world를 찍는 동적 라이브러리를 생성하고, 이를 사용하는 방법에 대해서 알아보도록 하겠다. 동적 라이브러리 파일 (libhello.c) [CODE type=C] /* shared library file */ #include void hello(void) { printf("Hello, library world\n"); } [/HTML][/CODE] 컴파일 하기 (Position Independet Code) # gcc -fPIC -o libhello.o -c libhello.c 공유라이브러리로 만들기 # gcc -shared -c libh..

Passion/Programming 2007.01.17

정적라이브러리

우리가 프로그램을 보면서 쉽게 접할 수 있는 xxxx.a 의 형식으로 된 파일을 말한다. 정적라이브러리는 단순히 오브젝트파일들의 묶음으로 보면 된다. 우리가 어떤 C파일을 오브젝트 코드(xxx.o)로 컴파일하고 나서 이런 오브젝트 파일들을 압축툴(ar)을 이용하여 하나의 정적라이브러리 파일로 생성하는 것이다. 이는 최근에는 많이 사용되지 않는 방법이지만, 라이브러리는 공개하고 소스는 공개하고 싶지않을 때 사용하는 방법이라고 보면 된다. 장점 : 정적 라이브러리는 사용자들이 프로그램을 다시 컴파일하지 않아도 링크시킬수 있도록 해주기 때문에, 컴파일 시간을 줄여준다. 정적 라이브러리를 만드는 방법 : ar rcs mylibrary.a file1.o file2.o 이 예제 명령은 오브젝트 파일 file1.o,..

Passion/Programming 2007.01.09