OVH Cloud OVH Cloud

dll sous linux ?

6 réponses
Avatar
Quiz
Bonjour,

J'ai donc un logiciel executable que je livre à des clients et ceux ci
doivent faire eux même des modifications dans des procedures .
Je l'ai déja fait avec windows et des dll et ca marche bien , je livrais au
client mon executable et une dll de test avec quelques procedures bien
défini et ils n'avaient qu'à modifier ces procécures et à recompiler la dll
, je n'avait pas à leur donner mes sources de mon programme principale.
Existe t-il un moyen de faire la même chose sous linux ?

6 réponses

Avatar
Marc Zyngier
"Quiz" == Quiz writes:






Bonjour,

[...]

Quiz> Existe t-il un moyen de faire la même chose sous linux ?

$ man dlopen

M.
--
And if you don't know where you're going, any road will take you there...





Avatar
Pascal Bourguignon
"Quiz" writes:
J'ai donc un logiciel executable que je livre à des clients et ceux ci
doivent faire eux même des modifications dans des procedures .
Je l'ai déja fait avec windows et des dll et ca marche bien , je livrais au
client mon executable et une dll de test avec quelques procedures bien
défini et ils n'avaient qu'à modifier ces procécures et à recompiler la dll
, je n'avait pas à leur donner mes sources de mon programme principale.
Existe t-il un moyen de faire la même chose sous linux ?


Bien sur. Il suffit de distribuer les '.o' et un Makefile pour faire
une édition de lien. Pour simplifier, on peut aussi simplement
rassembler les '.o' dans une bibliothèque '.a'.

On peut aussi prendre le problème dans l'autre sens, et utiliser
dlopen(3) pour charger dynamiquement une bibliothèque de procédures
fournies par l'utilisateur ("plug-in").

Mais dans le cas où on utilise des bibliothèques GPL ou LGPL, il faut
utiliser la première solution, afin de permettre à l'utilisateur de
faire une édition de lien avec une version modifiée des bibliothèques
sous licence GPL.



--
__Pascal Bourguignon__ http://www.informatimago.com/

PUBLIC NOTICE AS REQUIRED BY LAW: Any use of this product, in any
manner whatsoever, will increase the amount of disorder in the
universe. Although no liability is implied herein, the consumer is
warned that this process will ultimately lead to the heat death of
the universe.

Avatar
Quiz
Merci des réponses

"Quiz" a écrit dans le message de news:
el6gbs$tgk$
Bonjour,

J'ai donc un logiciel executable que je livre à des clients et ceux ci
doivent faire eux même des modifications dans des procedures .
Je l'ai déja fait avec windows et des dll et ca marche bien , je livrais
au client mon executable et une dll de test avec quelques procedures bien
défini et ils n'avaient qu'à modifier ces procécures et à recompiler la
dll , je n'avait pas à leur donner mes sources de mon programme
principale.
Existe t-il un moyen de faire la même chose sous linux ?



Avatar
ALain Montfranc
Marc Zyngier a écrit
"Quiz" == Quiz writes:






Bonjour,

[...]

Quiz> Existe t-il un moyen de faire la même chose sous linux ?

$ man dlopen

M.


Plus simple : LD_PRELOAD ;-)






Avatar
Quiz
Ok pour les fichiers .o mais comment fait on les fichiers .a ?
De plus est ce qu'on peut debugger les bibliothèques par gdb ou gdbserver ?

"Pascal Bourguignon" a écrit dans le message de
news:
"Quiz" writes:
J'ai donc un logiciel executable que je livre à des clients et ceux ci
doivent faire eux même des modifications dans des procedures .
Je l'ai déja fait avec windows et des dll et ca marche bien , je livrais
au
client mon executable et une dll de test avec quelques procedures bien
défini et ils n'avaient qu'à modifier ces procécures et à recompiler la
dll
, je n'avait pas à leur donner mes sources de mon programme principale.
Existe t-il un moyen de faire la même chose sous linux ?


Bien sur. Il suffit de distribuer les '.o' et un Makefile pour faire
une édition de lien. Pour simplifier, on peut aussi simplement
rassembler les '.o' dans une bibliothèque '.a'.

On peut aussi prendre le problème dans l'autre sens, et utiliser
dlopen(3) pour charger dynamiquement une bibliothèque de procédures
fournies par l'utilisateur ("plug-in").

Mais dans le cas où on utilise des bibliothèques GPL ou LGPL, il faut
utiliser la première solution, afin de permettre à l'utilisateur de
faire une édition de lien avec une version modifiée des bibliothèques
sous licence GPL.



--
__Pascal Bourguignon__ http://www.informatimago.com/

PUBLIC NOTICE AS REQUIRED BY LAW: Any use of this product, in any
manner whatsoever, will increase the amount of disorder in the
universe. Although no liability is implied herein, the consumer is
warned that this process will ultimately lead to the heat death of
the universe.



Avatar
Matthieu Moy
"Quiz" writes:

Ok pour les fichiers .o mais comment fait on les fichiers .a ?


man ar

De plus est ce qu'on peut debugger les bibliothèques par gdb ou
gdbserver ?


Pour les bibliothèques statiques (.a), je ne crois même pas que le
debugger voit la différence, puisque gdb ne voit que le binaire après
édition de lien.

Pour les bibliothèques dynamiques (.so, générées par exemple avec gcc
-shared), ça marche aussi très bien en général, le seul truc est que
ça complique un peu les choses si on veut poser un breakpoint sur une
fonction qui n'est pas encore chargée par exemple (enfin, ça complique
surtout pour les développeurs de gdb, pour l'utilisateur, gdb demande
si on veut mettre le breakpoint au chargement de la bibliothèque).

--
Matthieu