¿Por qué no funciona __attribute __ ((constructor)) en una biblioteca estática?

En el siguiente ejemplo, el programa debería imprimir "foo called":

// foo.c
#include <stdio.h>

__attribute__((constructor)) void foo()
{
    printf("foo called\n");
}

// main.c
int main()
{
    return 0;
}

Si el programa se compila así, funciona:

gcc -o test main.c foo.c

Sin embargo, si foo.c se compila en una biblioteca estática, el programa no imprime nada.

gcc -c main.c
gcc -c foo.c
as rcs foo.a foo.o
gcc -o test foo.a main.o

¿Por qué pasó esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta