CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Bibliotheques Dynamiques

hs_dino
hs_dino
Niveau 9
16 mars 2004 à 23:56:02

J´ai fait une librairie en . so qui est utilisé par mon executable. Le probleme c´est qu´il ne la trouve pas alors qu´elle est dans le repertoire courant. POur que çà fonctionne, je dois copier le . so dans un repertoire connu du / etc/ld.so.conf ou bien definir le chemin dans le LD_LIBRARY_PATH. Je trouve çà un peu moyen comme solution.

Y´a t´il une solution pour obtenir le meme resultat que sous windows avec les DLL ? C´est a dire qu´il cherche en premier dans le repertoire courant avant d´aller dans les dossiers de libraries.

Et puis par la meme occasion : http://www.zythum-project.com
Je cherche un peu de main d´oeuvre pour le portager Linux.

Briaeros007
Briaeros007
Niveau 10
17 mars 2004 à 00:01:22

ben tu peut peut etre utilsier le . bashrc et specifier le LD_LIBRARY_PATH non?

jarose
jarose
Niveau 10
17 mars 2004 à 14:24:00

Beh, c´est ça la hierarchie d´un systeme UNIX, quand tu installes un outil, les librairies tu les mets dans un dossier de lib, les executables dans un / bin, les fichier de conf dans un / share, etc...

Apres tu peux toujours changer le dl_path ´à la volé´, mais faut voit si c´est vraiment utile.

hs_dino
hs_dino
Niveau 9
17 mars 2004 à 16:36:19

:d) ben tu peut peut etre utilsier le . bashrc et specifier le LD_LIBRARY_PATH non?

Il me semble que . bashrc n´est lu que par le bash non ? Auquel cas ca signifierait qu´il faudrait le faire pour les shells installés, ca me parait pas top. A moins qu´il y ait un fichier commun pour tout les shells.

:d) Beh, c´est ça la hierarchie d´un systeme UNIX[...]

Oui c´est bien ce qui me fait peur.
J´ai les executables, les librairies dynamiques et les datas, je devrais mettre mes fichiers où avec cette fameuse philosophie ?

butagaz
butagaz
Niveau 9
17 mars 2004 à 17:40:40

Tu peux mettre l´option -L. à la compilation mais ce n´est peut-être pas ce que tu veux...

Briaeros007
Briaeros007
Niveau 10
17 mars 2004 à 18:18:22

oui bashrc est lu que par bash ; mais bon tu le met comme shell par defaut et hop non?

pourquoi tu veut pas mettre tes libs dans / usr/local/lib
enfin tu peut aussi rajouter une ligne au / etc/ld.so.conf ; )

hs_dino
hs_dino
Niveau 9
17 mars 2004 à 23:31:17

Il s´agit là d´un produit qui sera distribué sous la forme de RPM et TAR.GZ, il est donc evident que je dois adapter ce projet a la philosophie LINUX.

Donc, pour récapituler :
Je mets :
Les librairies dynamiques dans / usr/local/lib.
Et pour les datas du projet ? / usr/local/monprojet ?

Briaeros007
Briaeros007
Niveau 10
17 mars 2004 à 23:38:40

essaie plutot / usr/local/share/monprojet
je sais pas pourquoi mais bon :-d

jarose
jarose
Niveau 10
18 mars 2004 à 02:17:53

Arf, regardes un peu dans tes différents répertoires, tu trouveras par toi même quel ´rangement´ te conviens le mieux ; )

Sinon, tu peux toujours modifier la variable d´environnement en cours d´execution:

###

void *handle;

setenv(LD_LIBRARY_PATH, " /home/aeternis/proot_lib");
/ * pour plusieurs path tu peux utiliser:
appendpath(LD_LIBRARY_PATH, " ./1", " ./2");
prependpath(LD_LIBRARY_PATH, " /lib");;

Après tu peux balancer ton dlopen

  • /

handle = dlopen ( "pet.so", RTLD_LAZY);

###

J´ai pas testé, mais logiquement, c´est oP. Dans le cas contraire, tu peux passer par un executable shell que tu lances depuis ton programme principal.

. ..
export
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/aeternis
/proot_lib"
. ..

Sinon... je vois pas l´interet de faire ça, à part pour developper sans avoir un accès root, ou bien dans le cas d´une application qui permet aux users de charger dynamiquement leurs lib perso.

A toi de voir. En tout cas, j´espères que tu nous préviendras quand le portage sera finit, qu´on puisse tester votre jeu.

hs_dino
hs_dino
Niveau 9
18 mars 2004 à 11:51:03

:d) Sinon, tu peux toujours modifier la variable d´environnement en cours d´execution:

Bah vi mais le probleme c´est que c´est déjà trop tard. La resolution des liens se fait pendant la phase de chargement de l´executable.

le ´dlopen´ n´apporte pas d´interet pour la meme raison que cité précédement.

:d) Sinon... je vois pas l´interet de faire ça[...]

Il n´y a pas d´interet, j´ai une philosophie Windows et donc j´ai un peu de mal sous Linux, j´ai encore beaucoup de choses a apprendre. C´est pour çà que j´espere bien que vous allez m´aider dans tout mes petits problemes :-)))

Ceci dit, je peux egalement faire une librairie statique, ca va simplifier les choses, mais bon je perds tout l´interet de la maintenance et de l´economie d´espace memoire de l´utilisation d´une dynamique.

Tiens pendant que j´y suis avec le dlopen, hier soir je l´ai utilisé pour charger la . so du mod du jeu, et bien ca ne marche pas et je comprends toujours pas pourquoi. Dans ma . so, j´ai fait une fonction :

extern " C" KMod* AllocMod();

Et bien le dlsym( handle, " AllocMod" ) ; renvoie NULL ! !!
J´arrive pas a comprendre pourquoi ! !! Je l´avais utilisé sur mon autre projet de jeu ( www.t-bots.com) que j´ai lui aussi fierement porté sous Linux :ok: et ca marchait nickel.
Quand j´ouvre le fichier . so avec un editeur de texte, la fonction AllocMod n´apparait pas dedans, donc je comprends l´erreur du dlsym(), mais pourquoi n´apparait-elle pas dedans ? ??? Je l´ai pourtant compilée en -shared.

Au passage, existe-il un programme sous Linux pour afficher les entrées d´une . so ?

jarose
jarose
Niveau 10
18 mars 2004 à 13:51:55

As tu bien compilé l´executable avec l´option -ldl ? ( celui qui charge la ld).
Quelle option as tu mise avec dlopen pour la résolution des symboles ?
-> Questions inutile si après compilation, c´est null, mais sait on jamais :)

Une chose: la surchage de fonctions C++ n´est pas possible dans un code C, donc cela pourrait justifier ton problème ?

Balances ta ligne de compilation pour la librairie, et eventuellement le code si c´est pas trop gros ? ; )

De toute façon, si ça vient d´un problème d´interfaçage avec du C++ je pourrais pas t´aider.
Tout ce que je peut te conseiller, c´est de réviser la syntaxe d´`extern C` :)

-> nm test.so
-> nm test.o

nm permet de lire le contenu d´un code objet.

hs_dino
hs_dino
Niveau 9
18 mars 2004 à 18:17:45

Grace à ´nm´ j´ai pu voir qu´il manquait des fonctions dans la librairie et j´ai donc trouvé tout de suite que le makefile avait un soucis.

J´avais fait çà :

$(OBJ1)=toto.o
$(OBJ2)=titi.i
mylib.so : $(OBJ1) $(OBJ2)
g++ -shared -o$@ $<

Et en fait il ne linke que toto.o, je croyais que le chevron gauche ´<´ s´occupait de recopier la partie droite des depedances... on dirait qu´il ne prend que le 1er. Ma foi...

Bon, en tout cas ca marche nickel maintenant. Merci beaucoup de votre aide.

Balances ta ligne de compilation pour la librairie, et eventuellement le code si c´est pas trop gros ? ; )

Le code doit tourner aux alentours de 80 000 lignes de C++, je fais un copier coller quand meme ? :ok:

western
western
Niveau 9
18 mars 2004 à 18:57:54

j´ignore où tu as lu que $< recopie les dependances. $< ne recopie que la premiere dependance. La meilleur solution est de declarer une variable OBJS " contenant" tous les . o
par exemple:
OBJS = toto.o titi.i
libname = mylib.so
version = 0.1.0
lib = . /$(libname).$(version)
all: $(lib)

$(lib): $(OBJS)
$(CC) -shared -W1,-soname,$(libname) $(OBJS) -o $@
%.o:%.c
$(CC) -c $< #...

hs_dino
hs_dino
Niveau 9
18 mars 2004 à 21:22:16

:d) j´ignore où tu as lu que $< recopie les dependances[...]

Je n´ai jamais lu, je l´ai juste fait sans savoir.

:d) $(CC) -shared -W1,-soname,$(libname) $(OBJS) -o $@

Ca veut dire quoi -W1,-soname,$(libname) ?

Je connais l´option -W pour les warnings, mais ce bloc là ca veut dire quoi ? Parce que j´ai pas mis...

western
western
Niveau 9
19 mars 2004 à 10:49:30

rtfm

jarose
jarose
Niveau 10
19 mars 2004 à 13:17:52

lol

hs_dino
hs_dino
Niveau 9
20 mars 2004 à 16:11:42

:d) rtfm

? ??

zedix
zedix
Niveau 5
20 mars 2004 à 17:03:33

Read The Fucking Manuel...

http://info.astrian.net/jargon/terms/r/RTFM.html

hs_dino
hs_dino
Niveau 9
21 mars 2004 à 00:00:56

Bah justement. Comme c´est un ´Fucking´ manuel, je prefere ne pas le lire. Ca fait parti des choses de Linux que je ne supporte pas. Devoir se taper une doc en ´vim´ me fou hors de moi, y´a 20 ans en arriere je comprendrais, mais on est en 2004 non ? Là dessus, MSDN est une tuerie, on ne peut pas reprocher çà à Microsoft. :oui:

En attendant que la communauté Linuxienne se décide a faire une documentation correcte, je vais aller m´enerver un peu sur le ´man´. :-(

Sympa l´expression RTFM, je ne connaissais pas. :ok:

western
western
Niveau 9
22 mars 2004 à 13:18:10

je ne vois pas ce que certains reprochent à `man`! Si tu veux une interface WEB, il y a plusieurs sites internet qui regroupent les pages+d´autres docs ( google est ton ami)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware