Lệnh ranlib trong Linux

Giới thiệu

Trong lab này, chúng ta sẽ khám phá lệnh ranlib của Linux và các ứng dụng thực tế của nó. Lệnh ranlib được sử dụng để tạo chỉ mục cho nội dung của một tệp lưu trữ, thường là một tệp thư viện tĩnh. Chúng ta sẽ tạo một chương trình C đơn giản sử dụng thư viện tĩnh, và sau đó trình bày cách sử dụng lệnh ranlib để cập nhật bảng ký hiệu trong thư viện, giúp trình liên kết dễ dàng truy cập các ký hiệu được định nghĩa trong thư viện hơn. Ngoài ra, chúng ta sẽ đề cập đến quy trình tạo thư viện tĩnh và sử dụng lệnh ranlib để đảm bảo chức năng phù hợp của nó.

Tìm hiểu Mục đích của Lệnh ranlib

Trong bước này, chúng ta sẽ khám phá mục đích của lệnh ranlib trong Linux. Lệnh ranlib được sử dụng để tạo chỉ mục cho nội dung của một tệp lưu trữ, thường là một tệp thư viện tĩnh.

Thư viện tĩnh là tập hợp các tệp đối tượng có thể được liên kết vào các chương trình. Lệnh ranlib được sử dụng để tạo hoặc cập nhật bảng ký hiệu trong tệp lưu trữ, bảng này được trình liên kết sử dụng để truy cập nhanh các ký hiệu được định nghĩa trong thư viện.

Hãy bắt đầu bằng cách tạo một chương trình C đơn giản sử dụng thư viện tĩnh:

// main.c
#include <stdio.h>
#include "mylib.h"

int main() {
    printf("The answer is: %d\n", myfunction());
    return 0;
}
// mylib.c
int myfunction() {
    return 42;
}
// mylib.h
int myfunction();

Bây giờ, hãy biên dịch tệp mylib.c thành một tệp đối tượng và sau đó tạo một thư viện tĩnh từ nó:

gcc -c mylib.c
ar rcs libmylib.a mylib.o

Ví dụ đầu ra:

Lệnh ar được sử dụng để tạo tệp thư viện tĩnh libmylib.a từ tệp đối tượng mylib.o.

Tiếp theo, chúng ta cần sử dụng lệnh ranlib để tạo chỉ mục cho nội dung của thư viện tĩnh:

ranlib libmylib.a

Ví dụ đầu ra:

Lệnh ranlib cập nhật bảng ký hiệu trong thư viện tĩnh, giúp trình liên kết dễ dàng truy cập các ký hiệu được định nghĩa trong thư viện hơn.

Bây giờ, chúng ta có thể biên dịch tệp main.c và liên kết nó với thư viện tĩnh:

gcc -c main.c
gcc -o main main.o -L. -lmylib

Ví dụ đầu ra:

Tùy chọn -L. cho trình liên kết biết tìm kiếm thư viện trong thư mục hiện tại và tùy chọn -lmylib cho trình liên kết biết liên kết với thư viện libmylib.a.

Khi bạn chạy chương trình main, bạn sẽ thấy đầu ra sau:

The answer is: 42

Tạo Thư viện Tĩnh và Sử dụng ranlib

Trong bước này, chúng ta sẽ tạo một thư viện tĩnh đơn giản và sử dụng lệnh ranlib để cập nhật bảng ký hiệu của nó.

Đầu tiên, hãy tạo một thư mục mới cho dự án của chúng ta và điều hướng đến nó:

mkdir ~/project/static-library
cd ~/project/static-library

Bây giờ, hãy tạo một tệp C mới có tên mylib.c với một hàm đơn giản:

// mylib.c
int myfunction() {
    return 42;
}

Tiếp theo, chúng ta sẽ biên dịch tệp mylib.c thành một tệp đối tượng:

gcc -c mylib.c

Ví dụ đầu ra:

Bây giờ, chúng ta có thể tạo một thư viện tĩnh từ tệp đối tượng mylib.o bằng lệnh ar:

ar rcs libmylib.a mylib.o

Ví dụ đầu ra:

Lệnh ar tạo tệp thư viện tĩnh libmylib.a từ tệp đối tượng mylib.o.

Để cập nhật bảng ký hiệu trong thư viện tĩnh, chúng ta cần sử dụng lệnh ranlib:

ranlib libmylib.a

Ví dụ đầu ra:

Lệnh ranlib tạo một chỉ mục cho nội dung của thư viện tĩnh, giúp trình liên kết dễ dàng truy cập các ký hiệu được định nghĩa trong thư viện hơn.

Bây giờ, hãy tạo một chương trình đơn giản sử dụng myfunction() từ thư viện tĩnh:

// main.c
#include <stdio.h>
#include "mylib.h"

int main() {
    printf("The answer is: %d\n", myfunction());
    return 0;
}
// mylib.h
int myfunction();

Chúng ta có thể biên dịch tệp main.c và liên kết nó với thư viện tĩnh:

gcc -c main.c
gcc -o main main.o -L. -lmylib

Ví dụ đầu ra:

Tùy chọn -L. cho trình liên kết biết tìm kiếm thư viện trong thư mục hiện tại và tùy chọn -lmylib cho trình liên kết biết liên kết với thư viện libmylib.a.

Khi bạn chạy chương trình main, bạn sẽ thấy đầu ra sau:

The answer is: 42

Xác minh Thông tin Thư viện Đã cập nhật

Trong bước cuối cùng này, chúng ta sẽ xác minh thông tin đã cập nhật trong thư viện tĩnh mà chúng ta đã tạo ở bước trước.

Đầu tiên, hãy sử dụng lệnh nm để liệt kê các ký hiệu được định nghĩa trong thư viện tĩnh:

nm libmylib.a

Ví dụ đầu ra:

0000000000000000 T myfunction
                 U __libc_start_main
                 U printf

Đầu ra cho thấy thư viện tĩnh chứa một ký hiệu duy nhất, myfunction, được định nghĩa là một ký hiệu văn bản (mã).

Tiếp theo, hãy sử dụng lệnh ar để liệt kê nội dung của thư viện tĩnh:

ar -t libmylib.a

Ví dụ đầu ra:

mylib.o

Đầu ra cho thấy thư viện tĩnh chứa một tệp đối tượng duy nhất, mylib.o.

Cuối cùng, hãy sử dụng lệnh ranlib để hiển thị thông tin bảng ký hiệu cho thư viện tĩnh:

ranlib -t libmylib.a

Ví dụ đầu ra:

mylib.o

Đầu ra cho thấy lệnh ranlib đã cập nhật thông tin bảng ký hiệu cho thư viện tĩnh.

Bây giờ, hãy xác minh rằng chương trình chúng ta đã tạo ở bước trước vẫn có thể liên kết với thư viện tĩnh và chạy chính xác:

gcc -o main main.o -L. -lmylib
./main

Ví dụ đầu ra:

The answer is: 42

Chương trình chạy như mong đợi, chứng minh rằng thư viện tĩnh và thông tin bảng ký hiệu của nó được cập nhật chính xác.

Tóm tắt

Trong lab này, chúng ta đã tìm hiểu mục đích của lệnh ranlib trong Linux, được sử dụng để tạo chỉ mục cho nội dung của một tệp lưu trữ, thường là một tệp thư viện tĩnh. Chúng ta đã tạo một chương trình C đơn giản sử dụng thư viện tĩnh, biên dịch mã nguồn thành một tệp đối tượng, và sau đó tạo một thư viện tĩnh từ nó. Sau đó, chúng ta đã sử dụng lệnh ranlib để cập nhật bảng ký hiệu trong thư viện tĩnh, giúp trình liên kết dễ dàng truy cập các ký hiệu được định nghĩa trong thư viện hơn. Cuối cùng, chúng ta đã biên dịch chương trình chính và liên kết nó với thư viện tĩnh để trình bày việc sử dụng lệnh ranlib.

400+ câu lệnh phổ biến trong Linux