xem xét mã này:Tại sao tạo tệp .a từ .o để liên kết tĩnh?
one.c:
#include <stdio.h>
int one() {
printf("one!\n");
return 1;
}
two.c:
#include <stdio.h>
int two() {
printf("two!\n");
return 2;
}
prog.c
#include <stdio.h>
int one();
int two();
int main(int argc, char *argv[])
{
one();
two();
return 0;
}
Tôi muốn liên kết các chương trình này với nhau. Vì vậy, tôi làm điều này:
gcc -c -o one.o one.c
gcc -c -o two.o two.c
gcc -o a.out prog.c one.o two.o
Điều này chỉ hoạt động tốt.
Hoặc tôi có thể tạo ra một thư viện tĩnh:
ar rcs libone.a one.o
ar rcs libtwo.a two.o
gcc prog.c libone.a libtwo.a
gcc -L. prog.c -lone -ltwo
Vì vậy, câu hỏi của tôi là: tại sao tôi sẽ sử dụng phiên bản thứ hai - một trong những nơi mà tôi đã tạo ra một ".a" file - chứ không phải là liên kết của tôi". o "tệp? Cả hai dường như liên kết tĩnh, vậy có lợi thế hay sự khác biệt về kiến trúc trong cái này so với cái khác không?
Kết quả thường rất khác nhau. Nó xảy ra giống nhau trong ví dụ giả tạo này. – UncleO