Linux – GCC & Makefile & GDB & ClearCase


I. GCC

– Path stored GCC
+ /usr/bin
+ Or /usr/local/bin

– Confirm version of gcc
+ gcc –v

– See guide of gcc
+ info gcc
+ Or gcc man

– Path stored libs
+ /lib
+ Or /usr/lib
※Need check if meet error can not find another lib when compiling

– Path stored header files of libs
+ /usr/include
+ Or /usr/local/include
※Need check if meet error can not find another header file of libs when compiling

– Compile with enable GDB and point to libs on /usr/lib or /lib
gcc -g -o tutorial01 tutorial01.c -lavutil -lavformat -lavcodec -lz -lm

– Compile with directly point to path of header files
gcc -I/usr/mypro/include test.c -o test

– Compile with directly point to path of libs
+ Using directly path stored lib
gcc test.c -o -W test /usr/lib/libm.a
+ Just only find on standard path, but also find on directly path
gcc test.c -o test -L/usr/mypro/lib -ltool

II. Make library

+ Ví dụ có 2 file a1.c và a2.c chứa các hàm sẽ được dung làm thư viện

+ gcc -c a1.c a2.c   //build ra file object

+ ar cvr liba.a a1.o a2.o  //build ra lib, option c: yêu cầu tạo ra file thư viện nếu chưa có và không warning, r: yêu cầu thay thế file .o nếu có trong liba,a trước đó, v: hiển thị thông báo khi thực thi.

+ ranlib liba.a  //tạo thêm bảng chỉ mục cho các hàm trong thư viện

+ gcc test.c -o test -L. liba.a  //build và chỉ dẫn them thư viện trong thư mục hiện hành

+ nm liba.a  //xem các hàm đã được dung trong test.c

– Khuyết điểm của thư viện liên kết tĩnh .a:

+ Nhúng mã nhị phân kèm theo khi build chương trình à dung lượng chương trình lớn,tốn memory.

+ Có thể delete thư viện sau khi biên dịch mà không ảnh hưởng đến chương trình vì bản thân chương trình sau khi build đã chứa mã bin của static lib

+ Một khi thư viện thay đổi, cần biên dịch lại cả thư viện và chương trình

– Đặc điểm của thư viện liên kết động .so:

+ Không trực tiếp đưa hàm vào chương trình lúc build và link, mà chỉ đưa thông tin tham chiếu đến chúng trong thư viện liên kết, khi chương trình được thực thi, system mới chính thức nạp hàm cần dùng vào memory.

+ Khi thay đổi thư viện, chỉ biên dịch lại thư viện, chương trình không cần biên dịch lại mà có thể sử dụng tính năng mới của lib

– Tạo và sử dụng thư viện liên kết động:

+ gcc –c –fpic fred.c bill.c  //-fpic: position independence code, build object dự định đưa vào lib liên kết động

+ gcc –shared bill.o fred.o –o libfoo.so   //đưa object vào thư viện liên kết động libfoo.so, nếu libfoo.so đã tồn tại thì không cần dùng option o

+ gcc program.c –o program –L. –lfoo  //buile program và tìm libfoo.so trong thư mục hiện hành

– Nếu khi build, mà gcc thấy hai lib tĩnh và động cùng tên thì lib động sẽ được ưu tiên

– Lỗi error while loading shared libraries:

Libfoo.so: cannot open shared object file: No such file or directory

Do Linux không default tìm lib trong thư mục hiện hành chạy chương trình, mà chỉ default tìm lib trong /lib, /usr/lib, /usr/local/lib và path chỉ trong environment variable LD_LIBRARY_PATH.

Giải pháp:

+ Chép dynamic lib vào các thư mục default trên

+ export LD_LIBRARY_PATH=.:  //chỉ path tìm lib trong thư mục hiện hành

+ export LD_LIBRARY_PATH= /myprog/lib:/other/lib:  //chỉ path trực tiếp tìm lib

– ldd programname   //kiểm tra Linux có tìm ra tất cả các dynamic lib mà pro sử dụng không?

– Chủ động code để nạp vào gọi hàm trong dynamic lib mà không nhờ đến OS Linux, còn được xem như là gọi hàm liên kết muộn. Xem trong dlfcn.h, dlopen(), dlsym(), dlclose()

Cần dùng libdl.so của Linux khi biên dịch: gcc program2.c –o program2 -ldl

III. Makefile

1. Makefile

Basic

GNU make

Makefile Examples

2. Autoconfig

Basic

Automake

IV. GDB

V. ClearCase

ClearCase UserGuide

VI. Refer Links

Memo

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s

%d bloggers like this: