2009-09-04 3 views
0

Sous HPUX, j'ai besoin d'utiliser l'option de lien + h pour que les bibliothèques partagées de boost 1.39.0 contiennent les chemins corrects.Ajout de l'option de l'éditeur de liens pour renforcer la construction sur HPUX

-Wl,+h$(SPACE)-Wl,$(<[-1]:D=) 

(De http://www.nabble.com/HPUX-aCC:-Howto-avoid-building-boost-libraries-containing-absolute-library-path-references-when-calling-bjam-install-td17619511.html)

Je l'ai testé que cela fonctionne en piratant le fichier ensemble d'outils de gcc.jam:

796c796 
<  "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS) 
--- 
>  "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,+h$(SPACE)-Wl,$(<[-1]:D=) -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS) 

Mais maintenant, je veux une solution permanente, et je peux » t travailler comment.

J'ai d'abord essayé de mettre un bjam conditionnel dans la section actions link.dll, mais cette section contient des commandes shell.

Puis j'ai essayé d'ajouter la section supplémentaire à la variable OPTIONS pour ces cibles. Mais cela ne semble pas avoir d'effet sur le lien.

Enfin, j'ai essayé de créer un jeu d'outils séparé comme une copie de gcc.jam (hpuxgcc.jam), mais je ne pouvais pas obtenir du tout à travailler. Je suppose qu'il y a plus d'endroits dont j'ai besoin pour changer les noms des variables, mais la syntaxe Jam est au-delà de ce que je comprends.

Quelqu'un a-t-il une meilleure idée de la façon de le faire fonctionner? Ou devrais-je juste convertir la version hacky dans un patch que je cours avant de construire Boost? Sûrement il y a un meilleur moyen?

Est-ce La question est soit:

a) Comment puis-je (sous réserve de la plate-forme) ajouter le texte à la commande de liaison dans le gcc.jam

Ou:

b) Comment créer un nouvel ensemble d'outils basé sur gcc.jam?

Ce qui est toujours plus facile ...

Répondre

1

Qu'est-ce que l'option -h faire? Est-ce que cela définit le "soname"? Si c'est le cas, notez l'utilisation de HAVE_SONAME et SONAME_OPTION dans la même action. Ensuite, notez le bloc de code dans gcc.jam où il est défini:

if [ os.name ] != NT && [ os.name ] != OSF && [ os.name ] != HPUX && [ os.name ] != AIX 
{ 
    # OSF does have an option called -soname but it does not seem to work as 
    # expected, therefore it has been disabled. 
    HAVE_SONAME = "" ; 
    SONAME_OPTION = -h ; 
} 

Vous pouvez modifier cette fonction de votre plate-forme.

Je vous suggère de faire un suivi sur [email protected], qui est un meilleur endroit pour les questions Boost.Build que le débordement de pile.

+0

A a ajouté un bloc qui définissait HAVE_SONAME et SONAME_OPTION sur HP-UX et qui résolvait le problème. Merci. –

+0

Veuillez supprimer le patch (sortie svn diff) à [email protected] pour qu'il puisse être inclus dans la version officielle. Merci. –

Questions connexes