2010-09-06 3 views
0

Je travaille sur le portage d'une bibliothèque sur AIX. Cela fonctionne sur Solaris, Windows et Linux mais AIX me donne des maux de tête. Je suis à un point où il construit et s'exécute, mais j'ai un problème avec certaines des bibliothèques dans lesquelles il est lié. Idéalement, je veux être en mesure d'expédier une bibliothèque qui nécessite seulement le c runtime disponible sans autres dépendances. En ce moment j'ai un problème avec libpthread que je peux voir est un lien symbolique à une bibliothèque de threading spécifique d'AIX. Mon problème est le suivant: Si je ne liez pas pthread (je ne semble pas avoir besoin de Solaris pour la même base de code), j'obtiens des symboles indéfinis. C'est bien j'utilise pthreads. Si je le relie, alors cela fonctionne bien, sauf que toute application appelante doit aussi lier des pthreads. Je ne comprends pas vraiment pourquoi mon app appelant, qui n'a pas de dépendance sur pthread, a besoin de se lier à elle juste parce qu'elle appelle une bibliothèque qui lie à l'objet partagé?Liaison dynamique AIX

Je suis sur AIX 6.1 en utilisant gcc 4.2.4. Je serais d'accord avec l'envoi d'une bibliothèque qui nécessite la présence de pthreads sur le chemin de la bibliothèque (idéalement, nous obtiendrions une version statique), mais je suis un peu mécontent de l'envoi d'une bibliothèque qui place des client.

Des idées sur ce que je pourrais faire de mal?

Répondre

0

J'ai l'air de tourner en rond. J'ai supprimé l'indicateur -shared sur l'éditeur de liens pour résoudre un problème antérieur et cela, bien sûr, rend la bibliothèque statique. Donc, le comportement est juste un comportement normal en ce que si vous dépendez d'une bibliothèque dynamique à partir d'une bibliothèque statique, vous devez lier les deux dans votre application. J'ai donc remis le drapeau partagé et maintenant la moitié de mes fonctions ne sont plus accessibles. Cela explique le problème que je voyais bien.