Tôi muốn xây dựng một số mã gọi một số mã khi tải lên thư viện được chia sẻ. Tôi nghĩ tôi sẽ làm điều đó như thế này:#pragma init và #pragma fini sử dụng trình biên dịch gcc trên linux
#pragma init(my_init)
static void my_init() {
//do-something
}
int add (int a,int b) {
return a+b;
}
Vì vậy, khi tôi xây dựng mã với
gcc -g -fPIC -c Wall tt.c
Nó trả
gcc -fPIC -g -c -Wall tt.c
tt.c:2: warning: ignoring #pragma init
tt.c:4: warning: ‘my_init’ defined but not used
Vì vậy, nó bỏ qua #pragmas của tôi. Tôi đã thử điều này trong mã thực và mã của tôi bị hủy bỏ bởi vì một hàm không được gọi trong phần pragma bởi vì nó bị bỏ qua.
Làm cách nào để tôi nhận được gcc để sử dụng các câu lệnh #pragma init và fini này?
chính xác những gì tôi đang tìm kiếm! – Josh
Hm, đối với gcc 4.4.6 Tôi nhận được 'dự kiến', 'hoặc ‘;’ trước lỗi ‘{’ token' với ví dụ trên. Khi tôi loại bỏ các thuộc tính từ định nghĩa chức năng và đặt một khai báo hàm với thuộc tính constructor trước nó, nó hoạt động như mong đợi/[documented] (http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html). – maxschlepzig
@maxschlepzig: Thuộc tính cần phải trước khai báo trong định nghĩa hàm, được cập nhật. – caf