Egloos | Log-in
F/OSS study
F/OSS study
[gcc] spec 파일 이용하기
gcc: 4.4.0


gcc 프로그램은 C 컴파일러로 알고 있지만
엄밀하게 말하면 C compiler driver이며 주어진 옵션을 처리한 후
"정해진 규칙"에 따라 실제 전처리기, 컴파일러, 어셈블러, 링커를 차례로 호출하는 역할을 한다.

여기서 정해진 규칙을 spec이라고 칭하며
사용자는 spec 파일을 제공하여 gcc의 여러 spec들을 override하는 것이 가능하다.
다음과 같이 gcc를 실행해보면 내장(built-in) spec을 이용한다는 정보를 볼 수 있다.

~/temp/gcc-test $ gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../srcdir/configure --prefix=/usr/local
Thread model: posix
gcc version 4.4.0 (GCC)

내장 spec들을 보고 싶다면 -dumpspecs 옵션을 주어 gcc를 실행하면 된다.
-dumpspecs의 출력을 살펴보면 다음과 같은 부분이 보인다

*lib:
%{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}

lib이라는 spec은 링크 시 링커에게 넘겨줄 라이브러리의 목록을 지정하는 것이다.
비교적 짧고 간단하므로 의미를 하나씩 살펴보면
먼저 -pthread 옵션이 주어졌을 때는 -lpthread를 출력하고
-shared 옵션이 주어졌을 때는 -lc를 출력하고
-shared 옵션이 주어지지 않고 -mieee-fp 옵션이 주어졌다면 -lieee를 출력하고
-shared 옵션이 주어지지 않고 -profile 옵션이 주어졌다면 -lc_p를 출력하고
-shared 옵션이 주어지지 않고 -profile 옵션이 주어지지 않았다면 -lc를 출력한다.

따라서 일반적으로 컴파일 시에 C 라이브러리와 링크를 하면서도
-lc 옵션을 주지 않았던 이유를 알 수 있다.

이제 실제로 specs 파일을 이용하여 이를 제어할 수 있는지 살펴보자.
먼저 다음과 같이 간단한 myspec 이라는 이름의 텍스트 파일을 만든다.

*lib:
%{!v:%e-v option must be given} -lc

spec에서 %e 문자가 나오면 이후의 문자열을 에러 메시지로 출력하고 종료한다.
위의 spec은 컴파일 시 -v 옵션을 지정하지 않으면 에러를 발생시키도록 한 것이다.
-v 옵션이 주어졌다면 에러가 발생하지 않고 단지 -lc 만을 출력한다.
(-lc를 빼먹으면 링크 과정에서 (당연히) 에러가 나므로 반드시 넣어둔다.)

그리고 다음과 같이 gcc를 실행해 보면 myspec을 이용한다는 것을 볼 수 있다.

~/temp/gcc-test $ gcc -specs=myspec hello.c
gcc: -v option must be given
~/temp/gcc-test $ gcc -specs=myspec hello.c -v
Using built-in specs.
Reading specs from myspec
...
~/temp/gcc-test $ ./a.out
Hello, world

by namhyung | 2009/07/10 14:05 | System | 트랙백(3) | 덧글(0)
트랙백 주소 : http://studyfoss.egloos.com/tb/5037962
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from tomato_house at 2010/02/09 17:11

제목 : [gcc] spec 파일 이용하기
[gcc] spec 파일 이용하기...more

Tracked from F/OSS study at 2010/03/18 18:50

제목 : [gcc] gcc 실행 과정
gcc: 4.4.1 이전 글 보기 : [gcc] spec 파일 이용하기 전에 gcc의 spec 파일을 살펴보면서 gcc의 동작을 제어할 수 있다는 것을 알았다. 이번에는 실제로 gcc가 컴파일을 수행할 때 어떤 식으로 호출되는지를 자세히 살펴보기로 하자. 전에도 말했듯이 /usr/bin/gcc 프로그램 자체는 컴파일러가 아니고 주어진 파일에 따라 적절한 컴파일 과정이 진행되도록 실제 전처리기, 컴파일러, 어셈블러, 링커 등을......more

Tracked from at 2014/03/11 00:36

제목 : garcinia cambogia capsules
line3...more

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶

카테고리
General
Application
System
Kernel
Book
Tips
태그
glibc binutils computer-architecture C memory awk perf CAaQA3 SMP script build sed CARM algorithm block-layer patch synchronization linux scm gcc blktrace bash git kernel vcs documentation compiler elf emacs x86
전체보기
이글루 파인더

최근 등록된 덧글
informsi yang bagus dan be..
by pordanaia at 08/05
Informsi yang bagus dan b..
by jamalsu at 08/01
as inforasi yang menarik http..
by jamalsu at 07/22
최근 등록된 트랙백
Tod's Ferrari Homme
by Tods Pas Cher,Kodak did ..
Mocassin Femme
by Mocassins Homme, I got so..
natural garcinia cambogia
by
rss

skin by jiinny


X