290 likes | 456 Views
Beginning Linux Programming. 한양대학교 전자전기컴퓨터공학부 3 학년 실험 1 주차. 목 차 (Context). 배경 소개 UNIX LINUX GNU & FSF 공지 사항 시스템 관리팀 연락처 Workstation 실 사용 안내 계정 안내 개발 환경 소개 개발 환경 C 컴파일러 사용하기 헤더 파일 정적 라이브러리 동적 라이브러리. 배경 소개. UNIX LINUX GNU & FSF. UNIX?. AT&T 의 부설 Bell 연구실에서 개발
E N D
Beginning Linux Programming 한양대학교 전자전기컴퓨터공학부 3학년 실험 1주차
목 차(Context) • 배경 소개 • UNIX • LINUX • GNU & FSF • 공지 사항 • 시스템 관리팀 연락처 • Workstation 실 사용 안내 • 계정 안내 • 개발 환경 소개 • 개발 환경 • C 컴파일러 사용하기 • 헤더 파일 • 정적 라이브러리 • 동적 라이브러리
배경 소개 • UNIX • LINUX • GNU & FSF
UNIX? • AT&T의 부설 Bell 연구실에서 개발 • 1974년 C언어로 작성된 최초의 OS • Solaris, FreeBSD, OpenBSD, System V ..
LINUX? • Linux = Unix Clone • Linus Torvalds(헬싱키 대학) 제안 + 전세계 유닉스 프로그래머 개발 • Slackware, SuSE, Debian, Red Hat, ..
GNU & FSF • GNU • GNU is Not UNIX. • GNU Project • developing a complete UNIX style OS which is free software (LINUX) • FSF(Free Software Foundation) • Preserve, protect and promote the freedom to use, study, copy, modify, and redistribute computer software, and to defend the rights of Free Software users.
공지 사항 • 시스템 관리팀 연락처 • Workstation 실 사용 안내 • 계정 안내
시스템 관리팀 연락처 • Hompage : http://eece.hanyang.ac.kr • E-mail :toggiya@ece.hanyang.ac.kr • 02-2282-0579
Workstation 실 사용 안내 • 웍스테이션 실 사용 가능 시간 • 평일 : 13시 ~ 21시 • 네트웍을 통한 원격 접속 방법 • 네트웍으로 접근 가능한 웍스테이션 • apollo, baccus, quassar, diana, eros, kalypso, hercules, artemis, iccarus, muja, cupid, neptune, xanadu, rapier, pluto, titan • ssh를 사용하여 접속 • Putty 사용 추천(Google에 putty 검색해서 다운로드) • xxx.hanyang.ac.kr 서버에 접속 • [test@apollo guest]$ ssh artemis.hanyang.ac.kr • 계정 입력 • 암호 입력
계정 안내 • 계정당 할당된 디스크 용량 150MB • 사용자 홈디렉토리 /home/data1/계정이름 • 프린트시 lp 명령을사용 • (개인당 100장씩 사용가능, 100이상 사용자는 관리자에게 연락할 것)
개발 환경 소개 • 개발 환경 • C 컴파일러 사용하기 • 헤더 파일 • 정적 라이브러리 • 동적 라이브러리
개발 환경 • VI • Editor • GCC • C Compiler • GDB • Debugger
C 컴파일러(실습) • C Program을 만들기 위해서 Editor로 vi를 사용한다. [test@apollo guest]$ vi ~ VIM - Vi IMproved ~ ~ version 6.1.320 ~ by Bram Moolenaar et al. ~ Vim is open source and freely distributable ~ ~ Help poor children in Uganda! ~ type :help iccf<Enter> for information ~ ~ type :q<Enter> to exit ~ type :help<Enter> or <F1> for on-line help ~ type :help version6<Enter> for version info ~ ~ 0,0-1 All
C 컴파일러(실습) • 다음 명령을 실행한다. [test@apollo guest]$ vi filename.c ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ "filename.c" [New File] 0,0-1 All
C 컴파일러(실습) • 위의 화면에서 “i“를 누르면 파일의 내용을 쓸 수 있게 된다. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ -- INSERT -- 0,1 All
C 컴파일러(실습) • 위와 같은 상태에서 다음과 같은 Code를 작성한다. File:filename.c 1 #include<stdio.h> 2 3 int main() 4 { 5 printf("Hello World\n"); 6 exit(0); 7 }
C 컴파일러(실습) • 위와 같은 작업을 수행한 후 작성한 내용을 저장하여야 하는데, shift + : 키를 누르면 화면 아래에 “ : “ 표시가 생긴다. 여기에 “wq” 명령을 수행하면 filename.c라는 파일이 만들어 진다. int main() { printf("Hello World\n"); exit(0); } ~ ~ ~ ~ ~ ~ "filename.c" [New] 8L, 76C written [test@apollo guest]$
C 컴파일러(실습) • 이제 만들어진 C 프로그램에 대한 컴파일, 링크 작업을 해야 하는데 다음과 같은 명령으로 수행할 수 있다. [test@apollo /guest]$ cc -o filename filename.c 수행 후 아무런 error 메시지가 나오지 않았다면 두개의 파일을 볼 수가 있다. [test@apollo guest]$ cc –o filename filename.c [test@apollo guest]$ ls -al total 40 drwxr-xr-x 4 test user 4096 Aug 27 02:11 . drwxr-xr-x 6 test user 4096 Aug 5 03:21 .. -rwxr--r-- 1 test user 11641 Aug 27 02:11 filename -rw-r--r-- 1 test user 76 Aug 27 02:11 filename.c [test@apollo guest]$
C 컴파일러(실습) • 화면의 두 파일 중 초록색의 파일이 실행 파일이다. ./filename 이라 명령을 입력한 후 실행 시켜본다. “ ./ “ 이 명령은 현재 디렉토리를 의미한다. 위의 명령의 수행 결과로 다음과 같은 화면이 나타난다. [test@apollo guest]$ ./filename Hello World [test@apollo guest]$
헤더파일 • C언어 및 기타 프로그래밍 언어에서의 상수 또는 시스템 라이브러리를 호출하기 위한 함수들은 /usr/include 에 위치 • cc –I/usr/openwin/include fred.c • 어떤 함수에 대해 알고 싶을때 grep 명령을 사용할 수 있음 [test@apollo guest]$ cc –I/usr/openwin/include fred.c [test@apollo guest]$ cd /usr/include [test@apollo include]$ grep EXIT_ *.h ... stdlib.h:#define EXIT_FAILURE 1 stdlib.h:#define EXIT_FAILURE 0 ... [test@apollo include]$
라이브러리 파일 • 라이브러리(library) • 재사용이 가능하도록 작성된 컴파일된 함수의 모음 • 표준 시스템 라이브러리는 /lib 와 /usr/lib에 위치 • 라이브러리의 이름은 lib로 시작 • 라이브러리의 종류 • 정적 라이브러리 (확장자 .a) • 공유 라이브러리 (확장자 .so, .sa)
라이브러리 파일 • 컴파일시 –l 옵션을 사용하여 위치를 지정 • fred.c 를 컴파일 하는데, 실행 파일의 이름은 fred를 사용하고 수치 연산 라이브러리를 사용 • 여기서 -lm 은 표준 라이브러리 디렉토리인 /usr/lib의 libm.a 를 의미 [tes@apollo /guest]$ cc –o fred fred.c /usr/lib/libm.a [tes@apollo /guest]$ cc –o fred fred.c –lm
정적 라이브러리 • 라이브러리 사용 • 프로그램 작성시 함수의 선언이 포함된 헤더 파일을 include • 확장자 .a • ar(archieve) • 정적 라이브러리 생성, 관리 프로그램
실습하기 – 정적 라이브러리 #1 File:fred.c 1 #include <stdio.h> 2 3 void fred(int arg) 4 { 5 printf("fred: you passed %d\n", arg); 6 } File:bill.c 1 #include <stdio.h> 2 3 int bill(char* arg) 4 { 5 bill("bill:you passed %s\n", arg); 6 exit(0); 7 }
실습하기 – 정적 라이브러리 #2 [test@apollo guest]$ cc –c fred.c bill.c [test@apollo guest]$ ls *.o bill.o fred.o [test@apollo include]$ File:lib.h 1 /* 2 This is lib.h. It declares the functions 3 fred and bill for users 4 */ 5 6 void bill(char*); 7 void fred(int);
실습하기 – 정적 라이브러리 #3 • bill() 과 fred() 를 시험하기 위해 program.c 파일을 작성 File:program.c 1 #include "lib.h" 2 3 int main() 4 { 5 bill("Hello World"); 6 exit(0); 7 } [test@apollo guest]$ cc –c program.c [test@apollo guest]$ cc –o program program.o bill.o [test@apollo guest]$ ./program bill: you passed Hello World [test@apollo guest]$
실습하기 – 정적 라이브러리 #4 • 라이브러리를 생성하기 위해 ar 프로그램을 사용한다. • ar 을 사용하여 라이브러리가 생성한 뒤 라이브러리 목차를 정리하기 위해 ranlib를 사용한다. [test@apollo guest]$ ar crv libfoo.a bill.o fred.o a – bill.o a – fred.o [test@apollo guest]$ ranlib libfood.a [test@apollo guest]$ cc –o program program.o libfood.a bill: you passed Hello World [test@apollo guest]$
공유 라이브러리 • 정적 라이브러리의 단점 • 많은 프로그램이 같은 라이브러리 함수를 사용할 때 메모리 낭비 • 공유 라이브러리의 등장 • 프로그램이 함수 코드 자체를 가지는 것이 아니라 실행시 유효한 공유 코드에 대한 참조를 가지도록 링크된다. • Windows와 비교 • .so : .DLL • .sa : .LIB