1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

liên kết động và liên kết tĩnh trong lập trình nhúng

9 189 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 168,87 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đây là hai ứng dụng liên kết động và liên kết tĩnh trong lập trình nhúng có kèm theo code và hướng dẫn cụ thể. Các bạn làm đồ án nhất định sẽ cần đến.

Trang 1

Bộ môn: ĐIỆN TỬ VIỄN THÔNG

BÁO CÁO MÔN HỌC HỆ THỐNG NHÚNG

ỨNG DỤNG LIÊN KẾT TĨNH ỨNG DỤNG LIÊN KẾT ĐỘNG Giảng viên hướng dẫn: TS Võ Minh Huân Sinh viên thực hiện: Đinh Việt Hòa (Nhóm 19)

Trang 2

A Khái niệm:

Thư viện là tập hợp các chương trình con cho phép mã nguồn của

nó được chia sẻ

Các chương trình chính chạy và liên kết với các thư viện theo một tiến trình gọi là linking (liên kết), làm việc qua một trình liên kết (linker)

Thư viện chia làm 2 loại:

thư viện liên kết tĩnh và thư viện liên kết động

Trang 3

1.Thư viện liên kết tĩnh (Static link library):

Là tập hợp các file object tạo thành một file đơn nhất

Theo quy ước, các file này có đuôi kết thúc là *.a trong UNIX, tương

tự file LIB trên Windows

Khi biên dịch, trình biên dịch sẽ lấy toàn bộ mã nguồn của hàm trong thư viện đưa vào chương trình chính

2 Thư viện liên kết động (Dynamic link library):

Mã nguồn trong thư viện này không được đưa trực tiếp vào chương trình chính lúc biên dịch và liên kết

Trình liên kết chỉ lưu thông tin tham chiếu đến mã nguồn trong thư viện

Trang 4

B Ứng dụng liên kết tĩnh - Ứng dụng liên kết động:

Để minh họa cách sử dụng thư viện liên kết tĩnh và động, ta sẽ xây dựng chương trình tìm số nguyên tố từ 0 đến a, với a là số nguyên

dương do người dùng nhập

Ứng dụng này gồm 2 tập tin: tập tin timsonguyento.c chứa hàm tìm

số nguyên tố và tập tin main.c để gọi hàm chứa trong tập tin

timsonguyento.c.

Trang 5

Nội dung tập tin timsonguyento.c:

int songuyento(int a)

{

int i;

int dem=0;

switch (a) {

case 0:

dem=0;

break;

case 1:

dem=0;

break;

case 2:

dem=1;

break;

default:

for (i=2;i<a;i++) {

if(a%i==0) {

dem=0;

break;

}

else dem=1;

} }

if (dem==0)

return 0;

else

return 1;

}

Trang 6

Nội dung tập tin main.c:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int a,i;

int dem=0;

printf("Nhap so a vao: ");

scanf("%d",&a);

if (a<2)

printf(“Khong co SNT <2 \n”);

else

{

printf("\n -\n");

printf("Day so nguyen to tu 0

den %d la: ",a);

for(i=0;i<=a;i++) {

dem=songuyento(i);

if (dem==1) printf("%d, ",i);

} printf("\n -\n"); }

return 0;

}

Trang 7

1 Biên dịch và sử dụng thư viện liên kết tĩnh :

Ta sẽ biên dịch tập tin timsonguyento.c thành thư viện, sau đó liên kết thư viện này vào chương trình chính ở tập tin main.c.

Bước 1: Biên dịch tạo file object từ tập tin timsonguyento.c

$ gcc –c timsonguyento.c

Bước 2: Để tạo thư viện liên kết tĩnh libtimSNT.a từ tập tin

timsonguyento.c ta dùng lệnh ar.

$ ar cr libtimSNT.a timsonguyento.o

Bước 3: Biên dịch có liên kết (link) đến thư viện tĩnh

libtimSNT.a

$ gcc –o main main.c libtimSNT.a

Bước 4: Chạy chương trình:

$ /main

Trang 8

2 Biên dịch và sử dụng thư viện liên kết động :

Bước 1: Biên dịch tạo các file object có dùng tùy chọn –fPIC

$gcc -c –fPIC timsonguyento.c

Bước 2: Tạo thư viện liên kết động tên là libtimSNT.so

$gcc -shared –fPIC -o libtimSNT.so timsonguyento.o

Bước 3: Biên dịch tập tin main.c có liên kết (link) đến thư viện động libtimSNT.so

$gcc -o main main.c libtimSNT.so

Bước 4: Chạy chương trình: $ /main

Chương trình báo lỗi

Nguyên nhân: do loader tìm trong thư mục thư viện chuẩn

như /usr/lib, /lib không có tập tin libtimSNT.so.

Giải pháp: Ta sử dụng lệnh ldd để kiểm tra xem chương trình

main của chúng ta cần những thư viện gì

$ldd main

Trang 9

Ta phải thay đổi biến môi trường LD_LIBRARY_PATH để chỉ cho loader tìm trong thư mục chứa thư viện

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:

Sau đó ta chạy lại chương trình:

$./main

Ngày đăng: 05/04/2016, 21:49

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w