Lier statiquement glibc mais une autre bibliothèque dynamicment avec GCC

Je dois relier statiquement la glibc à mon projet, car la plate-forme cible ne prend en charge qu’une très ancienne (mais elle fonctionne avec la glibc liée de manière statique à partir de ma chaîne d’outils, je l’ai vérifiée).

Malheureusement, cette application doit utiliser la bibliothèque pthread, mais libpthread liée de manière statique prend trop de place.

Je voudrais lier statiquement glibc, et dynamicment pthread.

Après avoir exécuté cette commande

powerpc-unknown-linux-gnu-gcc object_files -lrt -lpthread -Wl,-Bstatic -lc 

Je reçois:

 /powerpc-unknown-linux-gnu/bin/ld: cannot find -lgcc_s 

Il y a un -static-libgcc si cela peut aider

Vous devriez utiliser -static , pas -Wl,-static . Ce dernier contourne les connaissances de gcc, et par conséquent, gcc tente toujours de lier le libgcc_s.so partagé plutôt que le libgcc_eh.a statique.

Si votre objective est de lier statiquement libc mais libpthread de manière statique, cela ne fonctionnera tout simplement pas. Vous ne pouvez pas mélanger et faire correspondre différentes versions de libpthread; cela fait partie de la glibc, juste un fichier séparé, et les internes doivent correspondre. Même avec la même version, je pense que relier statiquement libc et libpthread sera très perturbé.

Si la glibc est trop grande pour vos besoins, vous pouvez essayer une autre libc comme uClibc ou musl .