21
CHƯƠNG 6 LẬP TRÌNH LINUX 3/15/2010 1

tài liệu Mã nguồn mở Lap trình tren linux

Embed Size (px)

Citation preview

Page 1: tài liệu Mã nguồn mở  Lap trình tren linux

CHƯƠNG 6

LẬP TRÌNH LINUX

3/15/2010 1

Page 2: tài liệu Mã nguồn mở  Lap trình tren linux

6.1 Nhập môn lập trình Linux

6.1.1 Linux và Unix

• UNIX - Hệ điều hành server mạnh , được thử thách qua thời gian.

• Windows 2000 server ra đời - cạnh tranh với UNIX

• Cả UNIX và Win 2k sản phẩm có bản quyền ( Mặc dù Unix là sản

phẩm mã nguồn mở - SUN đã thương mại hóa)

• Linux ra đời trên nền tảng Unix , được toàn cộng đồng phát triển

và là sản phẩm mã nguồn mở rất phổ biến

• Linux là kernel cung cấp những chức năng tối thiểu của OS Unix.

• Ưu điểm Linux : Ổn định,tính kế thừa. Mọi chương trình trên Unix đều có thể chạy trên Linux ( Giống nhau 98%)

3/15/2010 2

Page 3: tài liệu Mã nguồn mở  Lap trình tren linux

6.1.2 Cộng đồng mã nguồn mở GNU

• Cộng đồng GNU ( “Gnu is Not Unix”) đã xây dựng nhiều ứng dụng trên Unix (Linux) : Word proccessing ,Office, Game, Multimedia, networking và các compiler , interpriter , programming languages…

• GNU - Phi lợi nhuận song cần tuân thủ một số quy định về bản quyền của GNU - GPL (General Public License) - “copyleft”( thay cho “copyright”)

•GNU cung cấp bộ biên dịch C/C++bao gồm :

- gcc trình biên dịch C

– g++ trình biên dịch C++

– gdb Debug

– GNU make Trình quản lý mã nguồn và trợ giúp biên dịch

- bash shell

3/15/2010 3

Page 4: tài liệu Mã nguồn mở  Lap trình tren linux

6.1.3 Lập trình trên Linux

• Ngôn ngữ C hỗ trợ rất tốt cho lập trình trên Linux.Tuy nhiên nó không phải là lựa chọn duy nhất.Có thể dùng Pascal , Assembler , Perl , Java , PHP…

• Chương trình Linux tồn tại trên hai dạng : thực thi ( file binary) giống như file *.exe trong DOS và thông dịch (script) giống như file *.bat . Hai dạng file này có thể

hoán đổi cho nhau . Để chay chương trình cần cấp quyền thực thi “x”

• Đường dẫn tới tập tin binary /bin/,/user/bin,user/local/bin ,./

• Cài biến môi trường

PATH = /bin:/user/bin:/user/local/bin:.

3/15/2010 4

Page 5: tài liệu Mã nguồn mở  Lap trình tren linux

6.1.4 Chương trình“ Hello world”

$vi helloworld.c

#include <stdio,h>

int main()

{

printf(“Helloworld \n”);

exit(0)

}

3/15/2010 5

Page 6: tài liệu Mã nguồn mở  Lap trình tren linux

6.1.5 Trình biên dịch gcc (gcc++)

gcc helloworld.c -o helloworld

Tùy chọn -o tạo ra file thực thi

helloworld Nếu không có -o tạo ra file

thực thi a.out

3/15/2010 6

Page 7: tài liệu Mã nguồn mở  Lap trình tren linux

6.2 Phát triển chương trình trên ngôn ngữ c

6.2.1 Chương trình trên Linux

• Trình biên dịch gcc thường nằm trong /usr/bin hoặc

/usr/local/bin. Khi biên dịch nó cần sự hỗ trợ của các file

C header trong /usr/include hoặc

/usr/local/include • Các thư viện liên kết nằm trong

/lib hoặc /usr/local/lib.

• Các thư viện chuẩn của gcc nằm trong /usr/lib/gcc- lib

• Chương trình nhị phân có thể nằm ở bất kỳ đâu song khi thực thi ta cần chỉ đường dẫn thông qua biến môi trường

PATH

3/15/2010 7

Page 8: tài liệu Mã nguồn mở  Lap trình tren linux

6.2.2 Header file

Định nghĩa hàm , khai báo các hằng với cấu trúc dữ liệu cần thiết khi biên dịch.Các header năm trong

/usr/include;/usr/local/include hoặc các thư mục con /usr/include/asm hoặc /usr/include/sys ví

dụ : #include <sys/types>.h

Một số đường dẫn đến các file header mặc định như

/usr/include/g++-2 (dùng cho trình biên dịch C++) Nếu

muốn tổ chức các header của riêng mình nằm ngoài thư mục

mặc định , ta phải chỉ rõ đường dẫn đến thư mục đó khi biên

dịch bằng tùy chọn -I

gcc -I/usr/mypro/include test.c -o test

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 8

(2009)

Page 9: tài liệu Mã nguồn mở  Lap trình tren linux

• Khi sử dụng hàm nào đó của thư viện hệ thống , để biêt hàm này được định nghĩa trong file header nào ta dùng lệnh man.Ví dụ hàm kill()

$man 2 kill

Sử dụng hai

file header

sys/types.h

và signal.h

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 9

(2009)

Page 10: tài liệu Mã nguồn mở  Lap trình tren linux

6.2.3 Các file thư viện

• Dùng để trình biên dịch bắt lỗi cú pháp , kiểm tra kiểu chương trình và tạo các object file.Trong Linux các file thư viện có phần mở rộng là.a,.so hoặc.sa và bắt đầu bằng lib . ví dụ libutil.a ; libc.so

• Hai loại liên kết:Static Link Library (.a) và Dinamic

Link Library(.so) Dùng lệnh ls /usr/lib để xem các thư

viện

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 10

(2009)

Page 11: tài liệu Mã nguồn mở  Lap trình tren linux

1.Tạo object file (.o) dùng tùy chọn -c ( giống .obj) trên C

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 11

(2009)

Page 12: tài liệu Mã nguồn mở  Lap trình tren linux

2. Thư viện liên kết tĩnh :

Trình biên dịch lấy toàn bộ mã thực thi của hàm thư viện

và đưa vào chương trình chính.Ví dụ program.c a.

Tạo hai thư viện đối tượng từ mã nguồn bob.c và

alice.c bob.o và alice.o

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 12

(2009)

Page 13: tài liệu Mã nguồn mở  Lap trình tren linux

b. Xây dựng hàm

lib.h $gedit lib.h

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 13

(2009)

Page 14: tài liệu Mã nguồn mở  Lap trình tren linux

c. Viết hàm program.c

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 14

(2009)

Page 15: tài liệu Mã nguồn mở  Lap trình tren linux

d. Biên dịch liên kết các thư viện

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 15

(2009)

Page 16: tài liệu Mã nguồn mở  Lap trình tren linux

• File thư viện .a là file chứa tập hợp các file thư viện đối tượng .o , là một dạng file nén được tạo bởi lệnh ar

Đã có thư viện libfoo.a , ta liên kết lại với

chương trình chính

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 16

(2009)

Page 17: tài liệu Mã nguồn mở  Lap trình tren linux

e.Tương thích giữa Linux và Windows/DOS

Linux Windows/DOS Ý nghĩa

func.o func.obj File đối tượng

lib.a lib.lib Static link lib

program program.exe Execute file

lib.so lib.dll Dinamic link lib

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 17 (2009)

Page 18: tài liệu Mã nguồn mở  Lap trình tren linux

3. Thư viện liên kết động

• Nhược điểm của TVLK tĩnh : Nhúng mã nhị phân vào

chương trình khi biên dịch. Rất tốn không gian bộ nhớ và

phải biên dịch lại mỗi khi thay đổi chương trình.

18

• Thư viện liên kết động giải quyết vấn đề trên. Trình liên

kết chỉ lưu các tham chiếu đến các hàm trong thư viện liên

kết. Khi thực thi, HDH sẽ chính thức nạp thư viện liên kết

cần thiết vào bộ nhớ. Như vậy, nhiều chương trình có thể

sử dụng chung một DLL duy nhất.

• Thư viện liên kết động trong Linux có phần mở rộng .so

• Để biên dịch file thư viện để đưa và liên kết sử dụng tùy

chọn -fpic hoặc -fPIC (Position Independence Code)

Page 19: tài liệu Mã nguồn mở  Lap trình tren linux

a. Tạo file đối tượng cho DLL

b. Tạo liên kết động cho các file .o trên - Dùng tùy chọn -shared

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 19

(2009)

Page 20: tài liệu Mã nguồn mở  Lap trình tren linux

c. Biên dịch lại program.c

# chỉ đường dẫn đến thư mục chưa libfoo.so

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 20

(2009)

Page 21: tài liệu Mã nguồn mở  Lap trình tren linux

• Kiểm tra HDH có tìm ra các file thư viện liên kết động dùng lệnh ldd

3/15/2010 CHƯƠNG 6 - LẬP TRÌNH LINUX 21

(2009)