리눅스를 쓸때마다 결국에는

vim이나 makefile 같은건 마주칠수밖에없는데

여전히 이런 유틸리티를 제대로 다루는 국내 서적이 거의없는 편이라

해외 서적이라도 보면서 해야할까 싶었지만 한국어만큼의 속도나 이해가 되지를 않아서 할수가 없었다.

 

그래서 나온지 한참지난 '유닉스 리눅스 프로그래밍 필수 유틸리티' 책을 사고싶었지만

진작에 품절이 되었고, 포기했는데 우연히 집근처 도서관에서 찾았고 진행하게되었다.

꼭 재발매나 ebook으로 나오면 좋겠는데 ㅠㅜ

 

1. gcc 쓰기

1.1. VIM으로 코드 작성

 

 

1.2 gcc 컴파일

 

 

-Wall : 모든 경고 메시지 출력

-O2 : 컴파일 최적화

-o : 출력 파일명

 

 

1.3 소스 파일 추가

like.c 를 위와같이 변경하고, love.c 추가 후 빌드

두 소스 코드를 컴파일 한 결과 하나의 실행파일 like가 나왔다.

 

 

1.4 gcc서 libm.a 링크

 love.c 에서 sin 함수를 쓰도록 쓰고 math.h 임포트

 

 

sin()은 기본으로 링크하는 libc.a가 아닌 libm.a에 있어 링크 옵션 명시 필요

 

 

2. Make로 프로젝트 관리

 

Makefile 작성 후 make 를 입력하면 /usr/bin/make가 이 파일을 읽고 동작

make 시 6번줄을

make clean 시 9번줄 실행

 

 

Makefile에서

like : like.c love.c 는 의존관계를 나타냄

like를 만드는데 like.c love.c 필요

:를 기준으로 전자 like는 $@와 대치

:를 기준으로 후자 like.c love.c는 $^와 대치되어 6번 명령을 실행

-> 계속 gcc 칠 필요없이 make 명령으로 쉽게 빌드, 정리 가능!

 

 

3. 디버깅 

3.1 준비

이렇게 작성하고 빌드하면 워닝이 줄줄이 뜨는데 디버깅할거니 넘어가고

 

실행하면 에러가 난다 C 공부한 사람은 왜 이런지 알겠지만 gdb로 보자

 

3.2 gdb 시작

 

디버깅을 하기위해 gcc에서 -g 옵션을 추가하자.

-g : 바이너리에 디버깅 심벌 추가. 소스코드 보면서 디버깅 가능!

* 디버깅 심벌없는 바이너리를 디버깅하는 경우 역어셈블 한뒤 어셈블리어로 해야함.

 

gdb like로 gdb에서 like 읽자

list 명령을 주면 10줄 정도 소스코드가 오는데

list 함수명의 경우 위 아래 5줄씩서 10줄이 나오도록 한다.

 

 

3.3 브레이크 걸고 디버깅 시작

 

b main으로 main함수 진입점 브레이크 -> 브레이크 없으면 그대로 지나가 디버깅 불가

r로 실행해서 main 진입점에서 걸린다....

 

오래 된 내용이여선지 제대로 동작하지 않아 pass

 

 

 

4. autotools

4.1 autotools 개요

- autotools : autoconf 패키지, automake 패키지에 있는 모든 유틸을 지칭

- autoconf : configure.ac 입력 -> configure 스크립트 생성

- configure 스크립트 : 시스템 정보를 모아 config.status 스크립트

- config.status 스크립트 : 모은 시스템 정보와 Makefile.in을 입력 -> Makefile 생성

- Makefile.in : Makefile의 템플릿

- automake : Makefile.in 자동 생성. 많은 시스템 정보를 써서 이식성이 높은 템플릿 만듬

autoconf를 이용한 Makefile 생성 과정
autoamke를 이용한 생성과정

 

 

 

4.2 configure.ac, Makefile.in 작성해서 Makefile 만들기

 

configurea.c 작성하고 autoconf 실행

 

생성된 configure 스크립트

 

@CC@, @CFLAGS@, @LIBS@는 configure 스크립트에 의해 수집한 시스템 정보로 바뀜

 

처음 configure 스크립트를 실행할때 2095번줄에 ';' 가 들어가 실행이 되지 않았는데, 제거 후 위와 같이 makefile 생성

 

 

4.3 automake로 makefile 만들기

autoamke를 이용한 생성과정

다시 automake를 이용한 과정을 보면 Makefile.am을 만들어야 하는데

cofngirue.ac를 조금 수정하면

 

AM_INIT_AUTOMAKE 부분을 추가하고

Makefile.am 작성

 

 

근데 autoconf를 실행하려해도 자꾸 정의되지 않은 매크로라며 에러 떠서 진행이 안됬는데

 

 

https://github.com/VowpalWabbit/vowpal_wabbit/issues/969

Ea37이란 분이 aclocal로 m4 env를 초기화부터하라고 조언하는데 해결됬다.

 

aclocal

autoconf

automake --add-missing --foreing --copy 순으로 실행해서 잘 진행됬고

아까 만든 Makefile.in보다 훨씬 이식성 좋은 Makefile.in이 만들어 졌다.

 

기존 Makefile을 지우고 다시 ./configure를 실행해서 보면

 

훨씬 복잡하고, 기능이 다양한 Makefile이 자동으로 완성

 

make 실행한 결과, 아까 디버깅 하다 말아서 오류나던 실행파일 그대로 빌드되었다.

 

 

이렇게 힘든 튜토리얼은 처음이다..

+ Recent posts