Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2007, 16h45   #1
Inactif
 
Avatar de Hibou57
 
Inscription : mars 2006
Messages : 852
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 852
Points : 398
Points : 398
Par défaut Créer une librairie statique (*.a) à partir d'une librairie dynamique (*.so.1) ?

Hallo les Linuxien(e)s,

Est-il possible de créer une librairie statique (*.a) à partir d'une librairie dynamique (*.so.1), même sans en avoir les sources ?

Je pense que oui, logiquement, ça doit être possible, puisque la librairie dynamique contient les sections binaire que l'on voudrait voir apparaître dans la librairie statique.... mais comment faire ?

Ou alors y at-il un moyen de lier statiquement à une librairie dynamique, tout en liant dynamiquement aux autres librairies ?

je pause cette question pour une compilateur qui fourni une librairie dynamique non standard sur les systèmes Linux. Et malheureusement, toute les applications qu'il produit sont lié à cette librairie, et donc ne fonctionne pas sur les Linux où cette librairie n'est pas installé.

Quel est la meilleur solution, et comment l'appliquer, entre :
  • Générer une librairie statique à partir d'un librairie dynamique, et remplacer la version dynamique par la version statique
  • Faire en sorte que la liaison vers certaines librairies dynamique soit en fait statique

Et si on remplacer une librairie dynamique par une librairie statique, le lieur vat-il la trouver comme il trouverait la librairie dynamique ?

Merci d'avance pour toute information
Hibou57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2007, 22h52   #2
Membre Expert
 
Avatar de granquet
 
Étudiant
Inscription : octobre 2005
Messages : 1 202
Détails du profil
Informations personnelles :
Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2005
Messages : 1 202
Points : 1 181
Points : 1 181
la solution retenue généralement c'est de distribuer le .so avec l'executable
et de jouer avec LD_LIBRARY_PATH et/ou LD_PRELOAD.

sinon pour ta question (transformer un .so en .a), aucune idée, mais à priori rien d'impossible.
__________________
click my www
............|___
...................\
.................._|_
..................\ /
..................."
granquet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2007, 17h58   #3
Inactif
 
Avatar de Hibou57
 
Inscription : mars 2006
Messages : 852
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 852
Points : 398
Points : 398
En fait je posais la question en pensant à un contexte où ces modifications ne sont pas possibles (pas possible d'installer la librairie, et encore moins de modifier la configuration du chargeur de librairie). Mais merci quand-même pour l'info.

Oui, je pense que ça n'a rien d'impossible, mais je ne pense pas que ce genre d'application existe, tout simplement parce que qu'elle ne serait que trop rarement utile.

Sinon, vu l'organisation des fichiers ELF en section, et vu comment sont organisées les liaisons entre les sections, alors oui, c'est possible en théorie.
Hibou57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 08h32   #4
Membre Expert
 
Avatar de Anthony.Desvernois
 
Homme Anthony Desvernois
Ingénieur sécurité & risque
Inscription : juin 2007
Messages : 1 501
Détails du profil
Informations personnelles :
Nom : Homme Anthony Desvernois
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur sécurité & risque
Secteur : Finance

Informations forums :
Inscription : juin 2007
Messages : 1 501
Points : 2 011
Points : 2 011
Code :
1
2
    * Générer une librairie statique à partir d'un librairie dynamique, et remplacer la version dynamique par la version statique
    * Faire en sorte que la liaison vers certaines librairies dynamique soit en fait statique
* ca doit etre possible, mais je ne vois pas comment
* il faut compiler les programmes utilisant ta librairie dynamique avec la librairie statique et non pas la dynamique. Il faut donc disposer de la lib statique, des sources, et modifier le makefile/configure en consequence.
Tu as l'option --static de gcc, ou tu peux simplement supprimers le lien vers la lib des flags de linkage et rajouter ton .a dans les objets a compiler (puisque apres tout un .a n'est rien d'autre qu'une archive contenant les .o prets a linker).
__________________
"Voyager, c'est découvrir que tout le monde a tort", Aldous Huxley
"Less is more" Ludwig Mies Van Der Rohe

Risk & Security Mgmt
Anthony.Desvernois est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h03.


 
 
 
 
Partenaires

Hébergement Web