在以下示例中,程序应打印"foo called\n"
:
// foo.c
#include <stdio.h>
__attribute__((constructor)) void foo()
{
printf("foo called\n");
}
// main.c
int main()
{
return 0;
}
如果程序是这样编译的,它可以工作:
gcc -o test main.c foo.c
但是,如果 foo.c 被编译成静态库,则程序不会打印任何内容。
gcc -c main.c
gcc -c foo.c
as rcs foo.a foo.o
gcc -o test foo.a main.o
为什么会这样?