apue.h gcc로 컴파일 하기

Study/Unix 고급 프로그래밍 2016. 1. 23. 22:34 by Somnus

Intro

책에서 처음으로 마주하는 코드인 <도해 1.3>의 컴파일에 관한 설명을 보면,

cc myls.c

이 한 줄을 보여주고, 기본적으로 myls.o가 생성된다고 한다. 하지만, 결과적으로 아래와 같은 화면을 마주치게 된다.

$ gcc myls.c
/tmp/~.o: In function 'main':
myls.c:(.text+~): undefined reference to 'err_quit'
myls.c:(.text+~): undefined reference to 'err_sys'
collect2: error: ld returned 1 exit status

참고로 Ubuntu에서 gcc와 cc는 같다.[각주:1] 일단 문제는, 컴파일러의 사용법이 잘못되었다.

How

해결 방법은 StackExchange(이하 SE)를 참고했다. 라이브러리를 다운로드해야 한다고 설명하고 있는데, SE의 본문에도 있듯이 여기서 다운로드할 수 있다. 다운로드하고 난 뒤 압축을 풀고, myls.c 파일이 있는 폴더로 옮겨주자. apue.h라는 헤더 파일도 필요한데, 여기서 다운로드하였다. 압축을 풀고 해당 폴더에서 make를 실행해주면 된다. 관리자 권한이 필요했던 것으로 기억한다.[각주:2]

$ cd apue.3e
$ make

이제 컴파일에 필요한 준비는 다 했으며, 컴파일을 하는 방법은 아래와 같다.

gcc -o myls myls.c -I ./apue.3e/include/ -L ./apue.3e/lib/ -lapue

SE 본문의 설명에 의하면, -I는 따라오는 pathname에서 include 파일을 찾으라는 옵션이고, -L은 라이브러리, 그리고 -lapue는 현재 폴더에서 apue라는 라이브러리를 찾으라는 것이다.

  1. gcc --version, cc --version을 입력하면 비교 확인할 수있을것이다! [본문으로]
  2. sudo make를 입력해보자. [본문으로]
Nav