Un petit problème avec ld version Solaris 10. J'ai une bibliothèque
qui réutilise des symboles du programme qui la charge. Avec GNU ld,
il suffit de rajouter -rdynamic lors de l'édtion des liens du
programme appelant et tout se passe bien. Je n'arrive
pas à faire la même chose sous Solaris. La bibliothèque est bien
chargée, mais elle ne voit pas les symboles de l'exécutable
appelant. Je viens d'essayer sans succès un tas d'options de ld. Une
idée ?
Merci,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
none
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
Gilles
JKB wrote:
Bonjour à tous,
Un petit problème avec ld version Solaris 10. J'ai une bibliothèque qui réutilise des symboles du programme qui la charge. Avec GNU ld, il suffit de rajouter -rdynamic lors de l'édtion des liens du programme appelant et tout se passe bien. Je n'arrive pas à faire la même chose sous Solaris. La bibliothèque est bien chargée, mais elle ne voit pas les symboles de l'exécutable appelant. Je viens d'essayer sans succès un tas d'options de ld. Une idée ?
Merci,
JKB
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
Gilles
JKB wrote:
Bonjour à tous,
Un petit problème avec ld version Solaris 10. J'ai une bibliothèque
qui réutilise des symboles du programme qui la charge. Avec GNU ld,
il suffit de rajouter -rdynamic lors de l'édtion des liens du
programme appelant et tout se passe bien. Je n'arrive
pas à faire la même chose sous Solaris. La bibliothèque est bien
chargée, mais elle ne voit pas les symboles de l'exécutable
appelant. Je viens d'essayer sans succès un tas d'options de ld. Une
idée ?
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
Gilles
JKB wrote:
Bonjour à tous,
Un petit problème avec ld version Solaris 10. J'ai une bibliothèque qui réutilise des symboles du programme qui la charge. Avec GNU ld, il suffit de rajouter -rdynamic lors de l'édtion des liens du programme appelant et tout se passe bien. Je n'arrive pas à faire la même chose sous Solaris. La bibliothèque est bien chargée, mais elle ne voit pas les symboles de l'exécutable appelant. Je viens d'essayer sans succès un tas d'options de ld. Une idée ?
Merci,
JKB
JKB
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
J'oubliais, j'utilise gcc-4.3...
JKB
-- Le cerveau, c'est un v
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
J'oubliais, j'utilise gcc-4.3...
JKB
-- Le cerveau, c'est un v
none
Avec gcc, l'option est -fpic ou -fPIC... Mais ceci dit, je ne sais pas quel est le comportement par défaut de dlopen sous Solaris en ce qui concerne la visibilité des symbole globaux. Les bibliothèques dynamiques sont elles ouvertes avec l'équivalent de l'option RTLD_GLOBAL? Y a il une variable d'environnement à positionner pour obtenir ce comportement ?
Gilles
JKB wrote:
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
J'oubliais, j'utilise gcc-4.3...
JKB
Avec gcc, l'option est -fpic ou -fPIC...
Mais ceci dit, je ne sais pas quel est le comportement par défaut de
dlopen sous Solaris en ce qui concerne la visibilité des symbole
globaux. Les bibliothèques dynamiques sont elles ouvertes avec
l'équivalent de l'option RTLD_GLOBAL? Y a il une variable
d'environnement à positionner pour obtenir ce comportement ?
Gilles
JKB wrote:
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
Avec gcc, l'option est -fpic ou -fPIC... Mais ceci dit, je ne sais pas quel est le comportement par défaut de dlopen sous Solaris en ce qui concerne la visibilité des symbole globaux. Les bibliothèques dynamiques sont elles ouvertes avec l'équivalent de l'option RTLD_GLOBAL? Y a il une variable d'environnement à positionner pour obtenir ce comportement ?
Gilles
JKB wrote:
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Une idee en l'air: ajouter -Kpic ou son equivalent lors de la compilation.
J'oubliais, j'utilise gcc-4.3...
JKB
JKB
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Avec gcc, l'option est -fpic ou -fPIC... Mais ceci dit, je ne sais pas quel est le comportement par défaut de dlopen sous Solaris en ce qui concerne la visibilité des symbole globaux. Les bibliothèques dynamiques sont elles ouvertes avec l'équivalent de l'option RTLD_GLOBAL? Y a il une variable d'environnement à positionner pour obtenir ce comportement ?
J'utilise d
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
Avec gcc, l'option est -fpic ou -fPIC...
Mais ceci dit, je ne sais pas quel est le comportement par défaut de
dlopen sous Solaris en ce qui concerne la visibilité des symbole
globaux. Les bibliothèques dynamiques sont elles ouvertes avec
l'équivalent de l'option RTLD_GLOBAL? Y a il une variable
d'environnement à positionner pour obtenir ce comportement ?
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Avec gcc, l'option est -fpic ou -fPIC... Mais ceci dit, je ne sais pas quel est le comportement par défaut de dlopen sous Solaris en ce qui concerne la visibilité des symbole globaux. Les bibliothèques dynamiques sont elles ouvertes avec l'équivalent de l'option RTLD_GLOBAL? Y a il une variable d'environnement à positionner pour obtenir ce comportement ?
J'utilise d
none
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Gilles
JKB wrote:
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Avec gcc, l'option est -fpic ou -fPIC... Mais ceci dit, je ne sais pas quel est le comportement par défaut de dlopen sous Solaris en ce qui concerne la visibilité des symbole globaux. Les bibliothèques dynamiques sont elles ouvertes avec l'équivalent de l'option RTLD_GLOBAL? Y a il une variable d'environnement à positionner pour obtenir ce comportement ?
J'utilise d�j� -fPIC pour la compilation et l'�dition des liens des biblioth�ques.
La biblioth�que en question est ouverte par un truc du genre :
if ((descripteur_bibliotheque = dlopen(bibliotheque, RTLD_NOW | RTLD_LOCAL)) == NULL) ...
Cela fonctionne parfaitement sous FreeBSD et sous Linux. � noter, je ne veux pas qu'un symbole d'une biblioth�que puisse r�soudre un symbole d'une autre biblioth�que, seulement qu'une biblioth�que puisse utiliser un symbole export� par le programme qui l'ouvre (et qui ne se trouve pas dans une autre biblioth�que).
Cordialement,
JKB
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite
que les symboles globaux soient vus par la bibliothèque dynamique.
Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et
link avec -rdynamic....
Gilles
JKB wrote:
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
Avec gcc, l'option est -fpic ou -fPIC...
Mais ceci dit, je ne sais pas quel est le comportement par défaut de
dlopen sous Solaris en ce qui concerne la visibilité des symbole
globaux. Les bibliothèques dynamiques sont elles ouvertes avec
l'équivalent de l'option RTLD_GLOBAL? Y a il une variable
d'environnement à positionner pour obtenir ce comportement ?
J'utilise d�j� -fPIC pour la compilation et l'�dition des liens
des biblioth�ques.
La biblioth�que en question est ouverte par un truc du genre :
if ((descripteur_bibliotheque = dlopen(bibliotheque,
RTLD_NOW | RTLD_LOCAL)) == NULL)
...
Cela fonctionne parfaitement sous FreeBSD et sous Linux. � noter, je
ne veux pas qu'un symbole d'une biblioth�que puisse r�soudre un
symbole d'une autre biblioth�que, seulement qu'une biblioth�que
puisse utiliser un symbole export� par le programme qui l'ouvre (et
qui ne se trouve pas dans une autre biblioth�que).
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Gilles
JKB wrote:
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Avec gcc, l'option est -fpic ou -fPIC... Mais ceci dit, je ne sais pas quel est le comportement par défaut de dlopen sous Solaris en ce qui concerne la visibilité des symbole globaux. Les bibliothèques dynamiques sont elles ouvertes avec l'équivalent de l'option RTLD_GLOBAL? Y a il une variable d'environnement à positionner pour obtenir ce comportement ?
J'utilise d�j� -fPIC pour la compilation et l'�dition des liens des biblioth�ques.
La biblioth�que en question est ouverte par un truc du genre :
if ((descripteur_bibliotheque = dlopen(bibliotheque, RTLD_NOW | RTLD_LOCAL)) == NULL) ...
Cela fonctionne parfaitement sous FreeBSD et sous Linux. � noter, je ne veux pas qu'un symbole d'une biblioth�que puisse r�soudre un symbole d'une autre biblioth�que, seulement qu'une biblioth�que puisse utiliser un symbole export� par le programme qui l'ouvre (et qui ne se trouve pas dans une autre biblioth�que).
Cordialement,
JKB
JKB
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL Les symboles d
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite
que les symboles globaux soient vus par la bibliothèque dynamique.
Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et
link avec -rdynamic....
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL Les symboles d
none
JKB wrote:
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL Les symboles d�finis par cette biblioth�que seront disponibles pour la r�solution des symboles des futurs chargements de biblioth�ques.
Je ne veux pas que les symboles de cette biblioth�que soient utilisables pour la r�solution de symboles d'une autre biblioth�que. C'est pour cela que j'ouvre l'objet avec un RTLD_LOCAL.
Fixons les id�es. Consid�rons que mon programme embarque en lui-m�me (pas dans une biblioth�que partag�e) un truc qui s'appelle instruction_sql(). Je veux que ma biblioth�que ait acc�s � ce symbole (qui ne provient pas d'une biblioth�que partag�e mais du programme lui-m�me). Par contre, si une biblioth�que externe exporte un symbole toto(), je ne veux pas qu'une autre biblioth�que puisse l'utiliser.
Ok, au temps pour moi. J'étais partit à fond sur la corrélation RTLD_GLOBAL <-> rdynamic qui est parfois présente dans la man page de dlopen, sans voir qu'à priori, les deux sont orthogonaux. Donc, je ne sais pas comment résoudre ton problème... Peut-être l'utilisation de RTLD_PARENT pourrait aider... cf http://docs.sun.com/app/docs/doc/816-5168/dlopen-3c?a=view Mais c'est pas top clair tout ça.
Gilles
JKB wrote:
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite
que les symboles globaux soient vus par la bibliothèque dynamique.
Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et
link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL
Les symboles d�finis par cette biblioth�que
seront disponibles pour la r�solution des symboles des
futurs chargements de biblioth�ques.
Je ne veux pas que les symboles de cette biblioth�que soient
utilisables pour la r�solution de symboles d'une autre biblioth�que.
C'est pour cela que j'ouvre l'objet avec un RTLD_LOCAL.
Fixons les id�es. Consid�rons que mon programme embarque en
lui-m�me (pas dans une biblioth�que partag�e) un truc qui s'appelle
instruction_sql(). Je veux que ma biblioth�que ait acc�s � ce
symbole (qui ne provient pas d'une biblioth�que partag�e mais du
programme lui-m�me). Par contre, si une biblioth�que externe exporte
un symbole toto(), je ne veux pas qu'une autre biblioth�que puisse
l'utiliser.
Ok, au temps pour moi. J'étais partit à fond sur la corrélation
RTLD_GLOBAL <-> rdynamic qui est parfois présente dans la man page de
dlopen, sans voir qu'à priori, les deux sont orthogonaux. Donc, je ne
sais pas comment résoudre ton problème... Peut-être l'utilisation de
RTLD_PARENT pourrait aider... cf
http://docs.sun.com/app/docs/doc/816-5168/dlopen-3c?a=view
Mais c'est pas top clair tout ça.
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL Les symboles d�finis par cette biblioth�que seront disponibles pour la r�solution des symboles des futurs chargements de biblioth�ques.
Je ne veux pas que les symboles de cette biblioth�que soient utilisables pour la r�solution de symboles d'une autre biblioth�que. C'est pour cela que j'ouvre l'objet avec un RTLD_LOCAL.
Fixons les id�es. Consid�rons que mon programme embarque en lui-m�me (pas dans une biblioth�que partag�e) un truc qui s'appelle instruction_sql(). Je veux que ma biblioth�que ait acc�s � ce symbole (qui ne provient pas d'une biblioth�que partag�e mais du programme lui-m�me). Par contre, si une biblioth�que externe exporte un symbole toto(), je ne veux pas qu'une autre biblioth�que puisse l'utiliser.
Ok, au temps pour moi. J'étais partit à fond sur la corrélation RTLD_GLOBAL <-> rdynamic qui est parfois présente dans la man page de dlopen, sans voir qu'à priori, les deux sont orthogonaux. Donc, je ne sais pas comment résoudre ton problème... Peut-être l'utilisation de RTLD_PARENT pourrait aider... cf http://docs.sun.com/app/docs/doc/816-5168/dlopen-3c?a=view Mais c'est pas top clair tout ça.
Gilles
JKB
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
JKB wrote:
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL Les symboles d�finis par cette biblioth�que seront disponibles pour la r�solution des symboles des futurs chargements de biblioth�ques.
Je ne veux pas que les symboles de cette biblioth�que soient utilisables pour la r�solution de symboles d'une autre biblioth�que. C'est pour cela que j'ouvre l'objet avec un RTLD_LOCAL.
Fixons les id�es. Consid�rons que mon programme embarque en lui-m�me (pas dans une biblioth�que partag�e) un truc qui s'appelle instruction_sql(). Je veux que ma biblioth�que ait acc�s � ce symbole (qui ne provient pas d'une biblioth�que partag�e mais du programme lui-m�me). Par contre, si une biblioth�que externe exporte un symbole toto(), je ne veux pas qu'une autre biblioth�que puisse l'utiliser.
Ok, au temps pour moi. J'étais partit à fond sur la corrélation RTLD_GLOBAL <-> rdynamic qui est parfois présente dans la man page de dlopen, sans voir qu'à priori, les deux sont orthogonaux. Donc, je ne sais pas comment résoudre ton problème... Peut-être l'utilisation de RTLD_PARENT pourrait aider... cf http://docs.sun.com/app/docs/doc/816-5168/dlopen-3c?a=view Mais c'est pas top clair tout ça.
Je suis en train de me demander si le truc ne vient pas du fait que gcc utilise par d
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
JKB wrote:
Le 30-09-2008, ? propos de
Re: ld et Solaris,
none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite
que les symboles globaux soient vus par la bibliothèque dynamique.
Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et
link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL
Les symboles d�finis par cette biblioth�que
seront disponibles pour la r�solution des symboles des
futurs chargements de biblioth�ques.
Je ne veux pas que les symboles de cette biblioth�que soient
utilisables pour la r�solution de symboles d'une autre biblioth�que.
C'est pour cela que j'ouvre l'objet avec un RTLD_LOCAL.
Fixons les id�es. Consid�rons que mon programme embarque en
lui-m�me (pas dans une biblioth�que partag�e) un truc qui s'appelle
instruction_sql(). Je veux que ma biblioth�que ait acc�s � ce
symbole (qui ne provient pas d'une biblioth�que partag�e mais du
programme lui-m�me). Par contre, si une biblioth�que externe exporte
un symbole toto(), je ne veux pas qu'une autre biblioth�que puisse
l'utiliser.
Ok, au temps pour moi. J'étais partit à fond sur la corrélation
RTLD_GLOBAL <-> rdynamic qui est parfois présente dans la man page de
dlopen, sans voir qu'à priori, les deux sont orthogonaux. Donc, je ne
sais pas comment résoudre ton problème... Peut-être l'utilisation de
RTLD_PARENT pourrait aider... cf
http://docs.sun.com/app/docs/doc/816-5168/dlopen-3c?a=view
Mais c'est pas top clair tout ça.
Je suis en train de me demander si le truc ne vient pas du fait que
gcc utilise par d
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
JKB wrote:
Le 30-09-2008, ? propos de Re: ld et Solaris, none ?crivait dans fr.comp.os.unix :
Et bien c'est exactement le comportement attendu alors. RTLD_LOCAL évite que les symboles globaux soient vus par la bibliothèque dynamique. Si tu souhaites qu'ils soient vus, utilises RTLD_GLOBAL à la place, et link avec -rdynamic....
Ce n'est pas ce que j'ai dans mon man :
RTLD_GLOBAL Les symboles d�finis par cette biblioth�que seront disponibles pour la r�solution des symboles des futurs chargements de biblioth�ques.
Je ne veux pas que les symboles de cette biblioth�que soient utilisables pour la r�solution de symboles d'une autre biblioth�que. C'est pour cela que j'ouvre l'objet avec un RTLD_LOCAL.
Fixons les id�es. Consid�rons que mon programme embarque en lui-m�me (pas dans une biblioth�que partag�e) un truc qui s'appelle instruction_sql(). Je veux que ma biblioth�que ait acc�s � ce symbole (qui ne provient pas d'une biblioth�que partag�e mais du programme lui-m�me). Par contre, si une biblioth�que externe exporte un symbole toto(), je ne veux pas qu'une autre biblioth�que puisse l'utiliser.
Ok, au temps pour moi. J'étais partit à fond sur la corrélation RTLD_GLOBAL <-> rdynamic qui est parfois présente dans la man page de dlopen, sans voir qu'à priori, les deux sont orthogonaux. Donc, je ne sais pas comment résoudre ton problème... Peut-être l'utilisation de RTLD_PARENT pourrait aider... cf http://docs.sun.com/app/docs/doc/816-5168/dlopen-3c?a=view Mais c'est pas top clair tout ça.
Je suis en train de me demander si le truc ne vient pas du fait que gcc utilise par d
JKB
Le 30-09-2008, ? propos de ld et Solaris, JKB ?crivait dans fr.comp.os.unix :
Bonjour à tous,
Un petit problème avec ld version Solaris 10. J'ai une bibliothèque qui réutilise des symboles du programme qui la charge. Avec GNU ld, il suffit de rajouter -rdynamic lors de l'édtion des liens du programme appelant et tout se passe bien. Je n'arrive pas à faire la même chose sous Solaris. La bibliothèque est bien chargée, mais elle ne voit pas les symboles de l'exécutable appelant. Je viens d'essayer sans succès un tas d'options de ld. Une idée ?
Pour ceux que ça intéresse, voici la solution. Pour une raison obscure, le LD de GNU utilisé par gcc ne comprends pas l'option -rdynamic. Cette option passée au frontend appelle ld avec -export-dynamic (et ne fait que ça). Donc en remplaçant la première, par la seconde, ça fonctionne.
Bref, c'est plus un bug qu'autre chose...
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 30-09-2008, ? propos de
ld et Solaris,
JKB ?crivait dans fr.comp.os.unix :
Bonjour à tous,
Un petit problème avec ld version Solaris 10. J'ai une bibliothèque
qui réutilise des symboles du programme qui la charge. Avec GNU ld,
il suffit de rajouter -rdynamic lors de l'édtion des liens du
programme appelant et tout se passe bien. Je n'arrive
pas à faire la même chose sous Solaris. La bibliothèque est bien
chargée, mais elle ne voit pas les symboles de l'exécutable
appelant. Je viens d'essayer sans succès un tas d'options de ld. Une
idée ?
Pour ceux que ça intéresse, voici la solution. Pour une raison
obscure, le LD de GNU utilisé par gcc ne comprends pas l'option
-rdynamic. Cette option passée au frontend appelle ld avec
-export-dynamic (et ne fait que ça). Donc en remplaçant la première,
par la seconde, ça fonctionne.
Bref, c'est plus un bug qu'autre chose...
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 30-09-2008, ? propos de ld et Solaris, JKB ?crivait dans fr.comp.os.unix :
Bonjour à tous,
Un petit problème avec ld version Solaris 10. J'ai une bibliothèque qui réutilise des symboles du programme qui la charge. Avec GNU ld, il suffit de rajouter -rdynamic lors de l'édtion des liens du programme appelant et tout se passe bien. Je n'arrive pas à faire la même chose sous Solaris. La bibliothèque est bien chargée, mais elle ne voit pas les symboles de l'exécutable appelant. Je viens d'essayer sans succès un tas d'options de ld. Une idée ?
Pour ceux que ça intéresse, voici la solution. Pour une raison obscure, le LD de GNU utilisé par gcc ne comprends pas l'option -rdynamic. Cette option passée au frontend appelle ld avec -export-dynamic (et ne fait que ça). Donc en remplaçant la première, par la seconde, ça fonctionne.
Bref, c'est plus un bug qu'autre chose...
Cordialement,
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.