Comme expliqué dans le bogue redhat #868662 , la méthode recommandée pour créer un lien est de laisser gcc appeler ld comme ci-dessous ;
> gcc -nostartfiles helloworld-lib.o -o helloworld_s -lc
Ce qui se traduit par un lien correct ;
> ldd helloworld_s
linux-vdso.so.1 => (0x00007ffd283bf000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd011b62000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd011f2f000)
Et l'exécution se passe bien ;
> ./helloworld_s
Hello, world!
Pourquoi ld est-il lié à /lib/ld64.so.1 qui n'existe pas ?
Parce que c'est la configuration par défaut pour un système générique, pas seulement Linux.