2017-07-24 6 views
0

Longue histoire courte: J'ai travaillé sur avec this script (que uses automake, autoconf, libtool). Le problème est que l'entrée rpath/runpath finale dans l'exécutable binaire ou so fichier a toujours le chemin absolu:Comment, quand, où définir les variables de script de libtool? (par exemple hardcode_minus_L)

  • il est apparu libtool est configuré par défaut comme celui-ci avec hardcode_libdir_flag_spec pour inclure toute valeur -L si elle est définie dans LDFLAGS

la seule question demeure: comment et à quel point (quelle est la bonne façon) puis-je définir d'autres variables libtool, comme hardcode_minus_L. (Je l'ai cherché sur le net, mais je ne pouvais pas trouver quoi que ce soit.)

J'ai essayé de faire ce qui suit:

  • après configure est appelé j'ai essayé de remplacer la valeur de la variable avec sed dans le fichier libtool (dans le répertoire approprié): cela a fonctionné, mais quand make est appelée, elle écrasait tout le nouveau fichier libtool (il a été régénéré)

Notez que 2 fichiers binaires sont effectués par cette, entrée rpath/runpath avec objdump -p:

  • libcurl.so: RUNPATH /home/user1/lib/rtorrent-0.9.7-1.5.3/lib:$ORIGIN/../lib
  • rtorrent: RUNPATH $ORIGIN/../lib:/home/user1/lib/rtorrent-0.9.7-1.5.3/lib

Merci

Répondre

0

Il est avéré qu'il est assez facile de modifier ces variables configure.ac, pas besoin de sed - après bidouiller et jeter un oeil dans les scripts générés. La seule chose peut être source de confusion que ces variables peuvent être appliquées à tags défini dans le projet donné.

E.g. changer hardcode_libdir_flag_spec à une valeur vide, vous insérez dans configure.ac dans le projet rtorrent (signifie qu'il va briser la compilation):

_LT_TAGVAR(hardcode_libdir_flag_spec,)="" 
_LT_TAGVAR(hardcode_libdir_flag_spec, CXX)="" 
_LT_TAGVAR(hardcode_minus_L,)=yes 
_LT_TAGVAR(hardcode_minus_L, CXX)=yes 

Le 2ème paramètre est la balise tag ou default si elle est vide.

+0

Notez que je n'ai pas pu résoudre le problème d'origine avec ceci, peu importe ce que j'ai essayé avec eux :) Donc, je suis juste coincé avec 'chrpath' util pour modifier les entrées' rpath' générées dans les binaires. – Krisztian

1

Je ne sais pas si la modification du script généré libtool est la meilleure approche pour résoudre votre problème. Mais si vous allez de cette façon, vous devez rendre l'approche robuste en exécutant votre commande sed au sein de AC_CONFIG_COMMANDS.

Le script libtool est généré pendant config.status en tant que commande de configuration (AC_CONFIG_COMMANDS: https://www.gnu.org/software/autoconf/manual/autoconf.html#Configuration-Commands).

config.status: executing libtool commands 

Vous pouvez modifier ce fichier généré en ajoutant un autre AC_CONFIG_COMMANDS. Nous utilisons ci-dessous pour modifier la variable prefer_static_libs:

AC_CONFIG_COMMANDS([libtool-fix-linker-preference],                              
    [${SED} -e '1,/prefer_static_libs=/ s/prefer_static_libs=.*$/prefer_static_libs=yes/' \ 
    libtool > libtool.fix && mv libtool.fix libtool]) 

Vous devez déclencher votre AC_CONFIG_COMMANDS après LT_INIT. configure/config.état indique l'exécution:

config.status: executing libtool commands 
config.status: executing libtool-fix-linker-preference commands 

Espoir qui aide,

Christian

+0

Merci pour la réponse. Malheureusement cela ne fonctionne pas avec rtorrent: il déclenche d'abord [autogen.sh] (https://github.com/rakshasa/rtorrent/blob/226e670decf92e7adaa845a6982aca4f164ea740/autogen.sh) et il ne déclenche pas l'auto-défini AC_CONFIG_COMMANDS au début de [configure.ac] (https://github.com/rakshasa/rtorrent/blob/226e670decf92e7adaa845a6982aca4f164ea740/configure.ac): seule la ligne suivante est visible à la fin de la sortie de configuration: 'config.status: en cours d'exécution Commandes de libtool'' – Krisztian

+0

Merci pour votre réponse, encore une fois, il m'a dit que je vais dans la bonne direction (donc j'ai upvoted le vôtre). – Krisztian