Trong ví dụ sau, chương trình sẽ in "foo được gọi là":Tại sao không __attribute __ ((constructor)) làm việc trong một thư viện tĩnh?
// foo.c
#include <stdio.h>
__attribute__((constructor)) void foo()
{
printf("foo called\n");
}
// main.c
int main()
{
return 0;
}
Nếu chương trình được biên dịch như thế này, nó hoạt động:
gcc -o test main.c foo.c
Tuy nhiên, nếu foo.c được biên dịch vào một thư viện tĩnh, chương trình sẽ không in được gì cả.
gcc -c main.c
gcc -c foo.c
as rcs foo.a foo.o
gcc -o test foo.a main.o
Tại sao điều này xảy ra?
Tại sao các downvotes? Có gì không chính xác? –
Không chắc chắn (không phải tôi!) Nhưng có lẽ ai đó đã ngoại lệ để bạn trả lời câu hỏi của riêng bạn quá nhanh? – DaveR
Hmm, tôi chỉ muốn thêm một tham chiếu hữu ích vào trang web cho một vấn đề không rõ ràng. Câu hỏi thường gặp cho thấy trả lời câu hỏi của chính mình là một điều tốt (đó là trong phần đầu tiên thực sự). –