108 – GCC 옵션(라이브러리 지정)

라이브러리를 지정하는 옵션 이전에, 일단 라이브러리에 대해서 간단하게 정의하고 이걸 어떻게 만드는지를 먼저 좀 써야 할 거 같다. 도중에 한번도 안적었었다.

라이브러리 함수에 대해서 살펴볼 때, 자주 사용되는 유용한 함수에 대한 오브젝트 파일을 모아둔 것을 라이브러리라고 한다고 하였다. 여기에 라이브러리에는 함수 목록 또한 포함된다.

스크린샷_2017-06-21_17-14-23.png

위에 화면은 예제를 만드는 노트북에 있는 라이브러리들 중 일부를 보여준다. 궁금하다면 /usr/lib32/ 폴더 안에 있는 것을 보면 된다. lib로 시작하는 이름의 파일들이 라이브러리 파일이고, 확장자는 .a다. 이 중에서 libc.a는 표준 라이브러리고, libm.a 파일은 수치 연산 라이브러리 파일이다. ar 명령어를 통해서 libc.a가 어떤 오브젝트 파일로 이루어졌는지 알 수 있다. ar 명령어는 정적 라이브러리를 생성, 조회, 편집하기 위해 이용되는 명령어이다.

라이브러리를 직접 만들어보기 위해서 실제로 예시를 작성해 보기로 하겠다. 라이브러리 파일로 이용하기 위해 두 함수를 각각의 파일로 만들어서 오브젝트 파일까지 만들었다.

이제 plus, minus 함수를 이용할 수 있는 라이브러리 파일을 생성할 준비가 끝났다. ar 명령어를 사용하면 라이브러리 파일을 생성할 수 있는데, r옵션을 이용하여 .a 파일을 먼저 생성한다.

라이브러리가 생성되었다. 그리고 나서 이제 라이브러리에 목록을 추가하여 완벽하게 처리해야 하는데, s 옵션을 이용하면 알아서 목록을 생성한다.

이제 해당되는 옵션에 대해서 살펴보도록 하겠다.

  • -l

표준 라이브러리가 아닌 라이브러리를 사용하고자 할 때 그 라이브러리를 지정해 주는 옵션이다. 여러 라이브러리가 존재하는데, libc 표준 라이브러리에 없는 표준 함수를 이용하고자 할 때에 이용이 필요하다. 예제를 만들어봤다.

수학 함수이다. sqrt 함수인데, math.h 함수 안에 정의되어 있으며 libm.a에 정의되어 있다. 실제로 코딩을 진행하고 gcc로 실행하면 에러가 나야 정상이다. (?!)

양쪽 다 실행되었는데, 규링의 환경이 문제가 있는지 추가 글을 작성해야 할 거 같다.

원래대로라면 위에서 그냥 컴파일하면 gcc에서 오류를 내야 한다. 그래서 -l옵션을 통해 어떠한 라이브러리를 이용해야 할 것인지를 적어야 하고, 적는 이름은 lib와 뒤에 확장자를 제외한 나머지를 그대로 쓰는 것이다. lib[m].c 를 쓰기 때문에 대괄호로 작성한 m만 적는 것이다.

  • -L

사용할 라이브러리 위치를 지정해주므로써 사용자가 라이브러리 파일을 직접 만들어 사용하거나 새 라이브러리를 내려받아서 사용할 때 이용한다.

아까 만든 libmy.a를 이용한 예제 코드를 작성하였따.

ld 링커가 에러를 냈다. 라이브러리를 찾을 때, /lib나 /usr/lib* 와 같이 정해진 디렉토리만을 찾기 때문에 그 안에 없는 libmy.a를 쓰려고 하니 오류가 발생한 것이다. libmy.a 라이브러리를 mylib 폴더로 복사해뒀다. 그래서 이걸 이용하고자 한다. 옵션 뒤에 폴더를 그대로 작성하면 된다.

라이브러리 관련된 옵션은 주로 링크에 관련된 옵션이 주로 존재하였고, 필요에 따라서 링크를 추가해주면 되는 경우가 상당히 많다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.