Hãy nói rằng tôi có chương trình sau đây (hello.c
):Linking file/header trong C
#include <stdio.h>
#include <math.h>
#define NAME "ashoka"
int main(int argc, char *argv[])
{
printf("Hello, world! My name is %s\n", NAME);
}
Vì vậy, như tôi hiểu nó quá trình biên soạn chương trình này là:
Tiền xử lý: sẽ sao chép-dán các tờ khai stdio.h và math.h và thay thế
NAME
với"ashoka"
.clang -E hello.c
Biên soạn: sẽ biến c mã vào lắp ráp đang
clang -S hello.c
tập sản xuất: hello.s
Lắp ráp: transform lắp ráp mã để đối tượng đang
clang -c hello.s
tập sản xuất: hello.o
Linking: kết hợp đối tượng tập tin vào một tập tin mà chúng tôi sẽ thực hiện.
clang hello.o -lm
OR (giả sử tôi cũng muốn liên kết hello2.o)
clang hello.o hello2.o
Vì vậy, ở đây đến các câu hỏi:
là quá trình mô tả đúng?
Trong giai đoạn liên kết, chúng tôi liên kết với nhau
.o
(Mã đối tượng) tệp. Tôi biết rằngmath.h
nằm trong thư mục/usr/include
. Đâu làmath.o
? Làm thế nào để liên kết tìm thấy nó?.a
(thư viện tĩnh) và.so
(thư viện động) nào trong Linux? Và chúng liên quan như thế nào với các tệp.o
và giai đoạn liên kết?Giả sử tôi muốn chia sẻ thư viện mà tôi đã tạo với thế giới. Tôi có một tệp
mylib.c
, trong đó tôi đã khai báo và triển khai các chức năng của mình. Làm cách nào để tôi chia sẻ điều này để mọi người có thể đưa nó vào dự án của họ bằng cách thực hiện một trong hai cách#include <mylib.h>
hoặc#include "mylib.h"
?
Mã của bạn sẽ phát ra lỗi biên dịch do sự vắng mặt của việc đóng '' ' – MikeCAT
@MikeCat thx. Đã chỉnh sửa – padawanTony
Cảm ơn tất cả câu trả lời của bạn. Tôi cũng sẽ tạo một bài đăng mới về câu hỏi 4 sau khi tôi thực hiện một số nghiên cứu. – padawanTony