Xây dựng tệp .so từ tệp .c bằng dòng lệnh gcc


162

Tôi đang cố gắng tạo một dự án hello world cho các thư viện động Linux (tệp .so). Vì vậy, tôi có một tập tin hello.c:

#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}

Làm cách nào để tạo tệp .so xuất hello(), sử dụng gcc từ dòng lệnh?

Câu trả lời:


291

Để tạo thư viện dùng chung, trước tiên bạn cần biên dịch mã C bằng -fPICcờ (mã độc lập vị trí).

gcc -c -fPIC hello.c -o hello.o

Điều này sẽ tạo ra một tệp đối tượng (.o), bây giờ bạn lấy nó và tạo tệp .so:

gcc hello.o -shared -o libhello.so

EDIT : Gợi ý từ các ý kiến:

Bạn có thể dùng

gcc -shared -o libhello.so -fPIC hello.c

để làm điều đó trong một bước. - Jonathan Leffler

Tôi cũng đề nghị thêm -Wallđể nhận tất cả các cảnh báo và -gđể lấy thông tin gỡ lỗi cho các gcclệnh của bạn . - Starynkevitch


1
Bạn phải làm gcc -c -fPIC blabla.c -o blabla.o trước, sau đó là lệnh trên.
dreamcrash 14/2/13

57
Hoặc gcc -shared -o libhello.so -fPIC hello.cđể làm điều đó trong một bước.
Jonathan Leffler

5
Tôi cũng đề nghị thêm -Wallđể nhận tất cả các cảnh báo và -gđể lấy thông tin gỡ lỗi cho các gcclệnh của bạn .
Basile Starynkevitch

Cảm ơn các đề xuất, tôi đã thêm chúng vào câu trả lời
dreamcrash 14/213

3
Tệp @sashoalm .ovề cơ bản là một tệp đối tượng cho tệp nguồn, trước khi liên kết chúng lại với nhau, thành tệp thực thi cuối cùng. Vì vậy, khi bạn chạy gcc -o abc.c abc.omột tệp đối tượng sẽ được tạo ra. Ans sau đó bạn có thể sử dụng abc.otập tin này để tạo .sotập tin. Để tạo rất nhiều tệp, tất cả những gì bạn cần là một mã c chính xác được viết trong một .ctệp. PS: Chỉ để xóa nghi ngờ của bạn trong bình luận.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.