1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng Lập Trình C Trên Fedora – Điều Kiện Cần

41 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài Giảng Lập Trình C Trên Fedora – Điều Kiện Cần
Trường học Fedora
Chuyên ngành Lập Trình
Thể loại bài giảng
Định dạng
Số trang 41
Dung lượng 2,4 MB

Nội dung

Thư viện liên kết Trang 3 Chương trình C Là một tập hợp của các : Khai báo và Định nghĩa Trang 4 Lập trình trên Linux4Ngôn ngữ C hỗ trợ rất tốt cho lập trình trên Linux.Tuy nhiên nók

Trang 1

LẬP TRÌNH C TRÊN LINUX

Trang 2

Nội dung

Trang 3

Chương trình C

 Là một tập hợp của các : Khai báo và Định nghĩa

 Dành cho : Hàm, Biến, và kiểu Dữ liệu

Trang 4

Lập trình trên Linux

4

 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, Python…

 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”

Cài biến môi trường : $echo $PATH

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

Trang 5

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

5

 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 , interpreter , 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 :

Trang 6

Lập trình C trên Fedora – điều kiện cần

 3 công cụ cần thiết để viết lập trình trên ngôn ngữ C :

 Trình soạn thảo ( text editor) : vi, gedit, emacs

$yum install emacs ( dưới quyền super user)

 Trình biên dịch ( compiler) : GNU Compiler Collection (GCC), CC : đưa về mã đối tượng

 $ gcc

 $ which gcc

 Thư viện chuẩn của C ( C standard library) : glibc

 $ locate glibc

Trang 7

"Hello, World!"Source Code

Trang 9

Phân tích "Hello, World!"

 Dòng đầu tiên trong ngôn ngữ C : preprossesordirective và luôn bắt đầu bằng dấu # khai báo thưviện

Trang 10

Quá trình biên dịch

 Quá trình biên dịch của gcc trải qua các bước sau:

Tiền xử lý (preprocessing) $gcc -E hello.c > hello.i

Biên dịch sang hợp ngữ(compiling) $gcc -S hello.i

Chuyển hợp ngữ sang mã máy (assembling) $gcc -c hello.s

Thiết lập các liên kết (linking) $gcc hello.o

preprocessing compiling assembling linking

Trang 11

Quá trình biên dịch

Trang 12

Tham số của gcc

Trang 13

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

 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 khithực thi ta cần chỉ đường dẫn thông qua biến môi trường

PATH

Trang 14

 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 như :

gcc –I/usr/mypro/include hello.c –o hello

Trang 15

Header file

15

 Khi sử dụng hàm nào đó của thư viện hệ thống, để biêthàm này được định nghĩa trong file header nào ta dùnglệnh man

 Ví dụ hàm kill() $man 2 kill

Sử dụng hai file header

sys/types.h và signal.h

Trang 16

Nội dung

1. Ngôn ngữ C

2. Minh họa Hello World và trình biên dịch

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

Trang 17

Các file thư viện

17

 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 thư viện:

Static Link Library (.a)

Dynamic Link Library(.so)

 Dùng lệnh $ ls /usr/lib để xem các thư viện

Trang 18

Các file thư viện

Trang 19

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

int cong( int a, int b )

Trang 20

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

 Để chương trình gọi được các hàm trong thư việntrên, chúng ta cần tạo một tập tin header lib.h khaibáo các nguyên mẫu hàm gọi:

int cong( int a, int b );

long nhan( int a, int b );

lib.h #include <stdio.h>

#include "lib.h"

int main () {

}

program.c

Trang 21

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

 Biên dịch và liên kết với chương trình chính :

$ gcc –c program.c # biên dịch

$ gcc program.o cong.o nhan.o –o program

 Thực thi chương trình

$ /program

Trang 22

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

.o là các tập tin thư viện đối tượng

 Tạo ra thư viện a từ các tập tin o ( tập nén) vào libfoo.a

$ ar cvr libfoo.a cong.o nhan.o # đóng gói

 Sau khi đã có được thư viện libfoo.a, liên kết lại với

chương trình :

$ gcc program.o -o program libfoo.a

Trang 23

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

 Nhược điểm của TVLK tĩnh : Nhúng mã nhị phân vàochương trình khi biên dịch

 Khi thực thi, HDH sẽ chính thức nạp thư viện liên kếtcần thiết vào bộ nhớ Nhiều chương trình có thể sử dụngchung một DLL duy nhất

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

Trang 24

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

 Khi biên dịch tập tin đối tượng để đưa vào thư viện liên kết động, chúng ta phải thêm tùy chọn –fpic (PIC- Position Independence Code – mã lệnh vị trí độc lập)

 Ví dụ : Biên dịch lại 2 tập tin cong.c và nhan.c

$ gcc -c -fpic cong.c nhan.c

$ gcc -shared nhan.o cong.o -o libfoo.so # tạo DLL

Trang 25

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

$ gcc program.c -o program -L -lfoo

Thực thi : $./program # báo lỗi

$ LD_LIBRARY_PATH=.:

$ export LD_LIBRARY_PATH

Trang 26

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

 Kiểm tra xem Hệ Điều Hành có thể tìm ra tất cả các thư viện liên kết động mà chương trình sử dụng hay không:

$ ldd program

Trang 27

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

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

Trang 28

Nội dung

1. Ngôn ngữ C

2. Minh họa Hello world và trình biên dịch

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

4. Makefile

Trang 29

CÁC CÔNG CỤ QUẢN LÝ HỖ TRỢ LẬP TRÌNH

QUẢN LÝ NHIỀU MÃ NGUỒN :

 Vấn đề nảy sinh khi phát triển những phần mềm lớn làphải biên dịch nhiều lần các mã nguồn Linux cung cấp

cho ta công cụ make.

 Make còn được sử dụng rất nhiều trong việc quản lý gói, cài đặt , gỡ bỏ các ứng dụng

Có nhiều loại makefile khác nhau như phiên bản thử nghiệm (trial), phiên bản chính thức hay (beta), phiên bản dò lỗi (Debug).

Trang 30

Tập tin makefile

Chương trình make không tự nó tạo ra các ứng dụng ,

nó phải được hướng dẫn , lập trình viên phải tạo ra

một file chứa thông tin hướng dẫn chương trình make

cách úng dụng sẽ được xây dựng và biên dịch File

chứa thông tin đó goi là makefile

Tập tin makefile thường đặc tả các phụ thuộc và các

quy tắc dẫn đến phụ thuộc :

Một phụ thuộc (dependences) gồm nhiều file liên quan đến nhau và cùng có một mục đích (target).

Quy tắc (rules) là các hướng dẫn hay quy định để các file

phụ thuộc tạo ra kết quả.

 Thông thường file đích hay file kết quả là các file thư viện

.o hay out

Trang 31

Xây dựng các phụ thuộc (dependences)

31

 Các phụ thuộc xác lập mối quan hệ giữa các file nguồn

trong ứng dụng.Trong makefile ta xây dựng các phụ

thuộc bằng cách viết tên file đích đầu tiên , tiếp theo làdấu “:” Kế đến là các file phụ thuộc các nhau bằng

khoảng trắng hay “tab”.

Ví dụ :

myapp: main.o 2.o 3.o

main.o: main.c a.h

2.o: 2.c a.h b.h

3.o: 3.c b.h c.h

Trang 32

Quy tắc

32

 Sau khi xác định các phụ thuộc , ta cần chỉ rõ các quytắc hay cách thức tạo ra các file đích Quy tắc chính làcâu trả lời cho câu hỏi “phải làm gì để tạo ra file đích?”

$ gcc –c myapp

 Cần lưu ý các quy tắc phải được ghi thụt đầu dòng vào

1 “tab” Cuối dòng cũng không để khoảng trắng Một sốtrình make sẽ không chịu diễn đạt quy tắc nếu cuốidòng có khoảng trắng

Trang 33

Cú pháp sử dụng trong makefile

33

$make # tương đương với

$make makefile Hoặc $make –f makefile1

Các tham số và tùy chọn : Ba tùy chọn thông dụng nhất là

-k : yêu cầu make “cứ tiếp tục” chạy khi phát sinh lỗi thay vì

phải dừng khi có lỗi đầu tiên.

-n : yêu cầu make in ra các thao tác mà nó thực thi song không

thực thi các thao tác đó để xuất ra kết quả

-f <filename> : chỉ định tập tin mà make phải diễn dịch Nếu không có tùy chọn –f , trình make sẽ diễn dịch file có tên là

makefile hoặc Makefile ngay trong thư mục hiện hành nơi

chứa makefile

Trang 34

Tab

Trang 35

$ gcc -o hellomake hellomake.c hellofunc.c -I

$ gcc hellomake.c hellofunc.c -I.

Trang 36

Makefiles 1

Trang 37

ĐIỀU KHIỂN MACRO BẰNG makefile

 Macro được sử dụng để thay đổi các tùy chọn khi áp dụng các quy tắc

biên dịch Make hỗ trợ các lệnh điều khiển các macro bên trong

makefile , giúp ta điều khiển các hoạt động của makefile uyển chuyển

hơn Hỗ trợ cho việc biên dịch, gỡ rối được được thuận lợi bằng cách tối ưu hóa các tùy chọn

Macro trong make được định nghĩa bởi cú pháp :

 MACRO=value ; #MACRO rỗng nếu sau dấu “=” LÀ KHOẢNG TRẮNG

 Để truy xuất giá trị của MACRO ta dùng cú pháp :

$(MACRONAME) hoặc $MACRONAME

 Thường MACRO được định nghĩa trong chương trình , tuy nhiên nó có thể được định nghĩa trên dòng lệnh

Ví dụ khi cần định nghĩa trình biên dịch cần sử dụng là gcc ta viết CC=gcc Macro

được định nghĩa trên dòng lệnh có giá trị ưu tiên hơn được định nghĩa trong chương trình

Trang 38

Một số quy tắc

 %.o: %.c : xây dựng o từ c # tương đương với c.o

 $@ : tên của target

 $^ : danh sách phụ thuộc

 $< : tên của phụ thuộc đầu tiên

 $? : tập hợp các phụ thuộc mới hơn target

Trang 39

Makefiles 2

Dùng 2 cờ :

 CC : cho biết trình biên dịch nào sẽ thực hiện

 CFLAGS :danh sách các cờ chúng ta cần để biên dịch

Trang 40

Makefiles 3

Trang 41

Lưu ý

 Thư viện trong C

 Cú pháp biên dịch

 Make file

Ngày đăng: 22/02/2024, 18:00

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w