1

programming

· 18년 전 · 1992

 programming

6.1 C programming
source file을 Operating System이 인식 가능한 상태의 object file로 만드는 작업을 compile이라 하고 이러한 file들을 서로 연결시키는 과정을 link라 한다.
link 과정에서는 실제 실행 가능하게 하는 loader 과정 또한 포함되어 있다. loader 과정은 실행 코드를 재배치하는 과정을 말한다.
source file(*.c) --compile--> object file(*.o) --link--> executable file

6.1.1 c source compiling(gcc)
source file을 실행 가능한 파일로 만들기 위해 gcc를 이용한다.

6.1.2 예제 source
[root @edu00 linux]#vi main.c
#include<stdio.h>

void core()
{
printf("In main\n");
}

[root @edu00 linux]#vi hilinux.c
#include<stdio.h>

int main()
{
 core();
 printf("Hi Linux!!\n");
 return 0;
}

[root @edu00 linux]#vi helloworld.c
#include<stdio.h>

int main()
{
 core();
 printf("Hellow world!!\n");
 return 0;
}

6.1.3 object file
hilinux.o는 독립적으로 실행될 수 없다. main.o의 실행 코드가 필요하기 때문이다.
object file들은 서로 연결되어야 사용이 가능하게 된다.

[root @edu00 linux]#gcc -c main.c
: object file을 생성한다. source file과 같은 이름(main.o)으로 생성된다.
    
[root @edu00 linux]#gcc -c hilinux.c helloworld.c
: source를 한번에 object화 할 수 있다.
    
[root @edu00 linux]#ls *.o
    
[root @edu00 linux]#file hilinux.o
hilinux.o: ELF 32-bit LSB relocatable, Intel 80386, version 1, not stripped
: ELF 파일 형식의 재배치가 가능한 파일이다.
: ELF는 shared object를 사용하는 실행 파일 형태이며 리눅스의 기본 실행 파일
 형태이다.
: not stripped는 디버깅을 위해서 정보를 파일 내에 남겨 두었다는 의미이다.

6.1.4 실행 파일
[root @edu00 linux]#gcc -o hilinux main.o hilinux.o
: 두 개의 object를 이용해서 hilinux라는 실행 파일을 만든다.
[root @edu00 linux]#gcc -o helloworld main.o helloworld.o

[root @edu00 linux]#gcc hilinux.c main.c

[root @edu00 linux]#gcc hilinux.o main.c    

6.2 library 만들기
6.2.1 개요
프로그램을 만들 때 빈번하게 사용되는 부분들을 프로그램을 만들 때마다 매번 새롭게 작성해야 한다면 비효율적일 뿐만 아니라 기능을 확장하는 데도 어려움이 따른다. 이를 보완하기 이해 도입된 개념이 라이브러리와 동적 링크 기능이다.
대부분의 프로그램들이 공통적으로 사용하게 되는 기능들은 이미 별도의 object file로 만들어져서 /lib 디렉토리나 /usr/lib 디렉토리안에 들어 있으며, 프로그램을 작성할 때 이러한 라이브러리들을 자신의 프로그램에 포함시켜서 보다 간편하고 효율적인 프로그램을 만들 수 있다.
사용할 함수들의 루틴이 있는 object file들을 묶어서 library file을 만들 수 있다.
gcc를 이용할 때 필요한 object file들을 일일이 나열하는 것이 아니라 필요한 라이브러리 파일만 호출하면 된다.

6.2.2 예제
[root @edu00 linux]#vi helloworld.c
#include<stdio.h>

int main()
{
 core();
sub();
 printf("Hello world!!\n");
 return 0;
}
 
[root @edu00 linux]#vi main.c
#include<stdio.h>
  
void core()
{
 printf("In main\n");
}

[root @edu00 linux]#vi sub.c
void sub()
{
 printf("sub function\n");

[root @edu00 linux]#gcc -c main.c sub.c
: object file을 만든다.
 
[root @edu00 linux]#ar r my_lib.a main.o sub.o
: 생성된 object file을 my_lib.a라는 파일로 묶어준다.
: r 옵션은 추가하고 d 옵션은 archive file에서 지운다.

[root @edu00 linux]#ranlib my_lib.a
: 라이브러리의 index를 생성한다.

[root @edu00 linux]#gcc -c helloworld.c

[root @edu00 linux]#gcc -o heloworld helloworld.o my_lib.a
: 라이브러리 파일과 object file을 이용해서 실행파일을 만든다.

6.3 Makefile
6.3.1 개요
compile 과정을 일괄적으로 처리해주는 tool이다. compile 과정을 Makefile이라는 file안에 기술하고 make 명령어가 파일을 참조하게 된다.
이때 Makefile은 make가 실행되는 디렉토리 안에 있어야 한다.
    
6.3.2 예제 소스
[root @edu00 linux]#vi main.c
#include<stdio.h>
void core()
{
 printf("In main\n");
}

[root @edu00 linux]#vi hilinux.c
#include<stdio.h>
int main()
{
 core();
 printf("Hi Linux!!\n");
  return 0;
}

[root @edu00 linux]#vi helloworld.c
#include<stdio.h>
int main()
{
 core();
 printf("Hellow world!!\n");
 return 0;
}

6.3.3 Makefile 작성
[root @edu00 linux]#vi Makefile
all: hilinux helloworld
# 처음 target에 지정된 것만을 실행하게 된다. (#make라고 실행했을 때)
    
hilinux: hilinux.o main.o
# hilinux를 target line이라 한다.
  gcc -o hilinux hilinux.o main.o
# 명령줄을 기술할 때는 반드시 <Tab>으로 시작해야 한다. commnad line이라 한다.
helloworld: helloworld.o main.o
  gcc -o helloworld helloworld.o main.o
hilinux.o: hilinux.c
 gcc -c hilinux.c
helloworld.o: helloworld.c
  gcc -c helloworld.c
main.o: main.c
  gcc -c main.c
-------------------------------------
[root @edu00 linux]#make
: 처음 target인 all에서 정의된 target들을 실행하게 된다.
: 이 명령을 내릴 때는 현재 디렉토리에 source file들과 Makefile이 있어야 한다.
: Makefile을 참조해서 일련의 작업들을 수행한다.

[root @edu00 linux]#make hilinux
: make의 인자로 Makefile에 있는 다른 target_name을 주면 그 target에 관련된
것들을 수행한다.
[root @edu00 linux]#vi Makefile(추가하기)
---------------------------------------
install:
  [ -d /home/nadream/bin ] || mkdir /home/nadream/bin
: 디렉토리가 없다면 생성한다.
  mv helloworld hilinux /home/nadream/bin
: nadream은 자신의 ID를 말한다.

clean:
  rm -f `find . -name '*.[oa]' -print`
: 생성되었던 object file이나 library file을 제거한다.
------------------------------------------
[root @edu00 linux]#make install
: "install:" target만 실행한다.
  
[root @edu00 linux]#make clean
: "clean:" target만 실행한다.
    

[이 게시물은 관리자님에 의해 2011-10-31 17:32:05 Linux에서 이동 됨]
|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
18년 전 조회 4,224
18년 전 조회 2,847
18년 전 조회 2,412
18년 전 조회 2,905
18년 전 조회 2,377
18년 전 조회 3,554
18년 전 조회 2,213
18년 전 조회 2,008
18년 전 조회 1,860
18년 전 조회 1,690
18년 전 조회 3,273
18년 전 조회 4,607
18년 전 조회 4,880
18년 전 조회 2,161
18년 전 조회 3,623
18년 전 조회 3,338
18년 전 조회 4,624
18년 전 조회 3,276
18년 전 조회 4,266
18년 전 조회 3,959
18년 전 조회 3,645
18년 전 조회 3,048
18년 전 조회 2,947
18년 전 조회 3,522
18년 전 조회 2,182
18년 전 조회 2,125
18년 전 조회 5,528
18년 전 조회 2,709
18년 전 조회 2,452
18년 전 조회 2,757
18년 전 조회 2,109
18년 전 조회 3,097
18년 전 조회 1만
18년 전 조회 1,946
18년 전 조회 2,860
18년 전 조회 2,898
18년 전 조회 2,148
18년 전 조회 3,002
18년 전 조회 3,996
18년 전 조회 2,959
18년 전 조회 2,338
18년 전 조회 6,059
18년 전 조회 3,684
18년 전 조회 6,365
18년 전 조회 2,453
18년 전 조회 2,382
18년 전 조회 2,402
18년 전 조회 3,342
18년 전 조회 3,211
18년 전 조회 1,993
18년 전 조회 3,735
18년 전 조회 1,651
18년 전 조회 1,390
18년 전 조회 1,413
18년 전 조회 1,568
18년 전 조회 1,663
18년 전 조회 3,436
18년 전 조회 2,285
18년 전 조회 1,734
18년 전 조회 2,135
18년 전 조회 4,631
18년 전 조회 2,363
18년 전 조회 3,009
18년 전 조회 1,997
18년 전 조회 3,493
18년 전 조회 1,865
18년 전 조회 7,677
18년 전 조회 3,330
18년 전 조회 1,313
18년 전 조회 2,343
18년 전 조회 3,550
18년 전 조회 2,398
18년 전 조회 2,172
18년 전 조회 2,789
18년 전 조회 3,754
18년 전 조회 3,514
18년 전 조회 2,602
18년 전 조회 1,953
18년 전 조회 1,981
18년 전 조회 2,546
18년 전 조회 2,022
18년 전 조회 2,909
18년 전 조회 1,702
18년 전 조회 2,241
18년 전 조회 1,712
18년 전 조회 2,178
18년 전 조회 2,397
18년 전 조회 2,333
18년 전 조회 2,290
18년 전 조회 2,215
18년 전 조회 3,516
18년 전 조회 1,703
18년 전 조회 3,479
18년 전 조회 2,052
18년 전 조회 5,318
18년 전 조회 2,182
18년 전 조회 2,367
18년 전 조회 1,759
18년 전 조회 2,166
18년 전 조회 3,685