A voir également:
- Compiler une DLL en C
- Msvcr110.dll est introuvable ✓ - Forum Windows 10
- X3daudio1_7.dll ✓ - Forum Jeux PC
- Msvcr71.dll ✓ - Forum Logiciels
- Comment compiler des pdf - Guide
- Xinput1_3.dll - Forum Jeux PC
7 réponses
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
14 juin 2004 à 10:14
14 juin 2004 à 10:14
Salut,
moi pour le faire j utilise cygwin....
et voici la procedure que j utilise et que je pense portable sur la plupart des compilateur...
donc en 1 je compile 1 a 1 tous les fichier .C
gcc -c -I"les includes particuliers" -o monfichier.o monfichier.c
ensuite je crée un fichier .def qui va referencer l ensemble des fonctions dedans il y a donc qq chose du genre:
EXPORTS
mafonction1
mafonction2
etc...
et ensuite je realise la creation de la dll:
gcc -shared -I"les includes perticuliers(chemin)" -o madll.dll monfichier.c monautrefichier.c monfichierdef.def
et hop tu as ta dll..
Sinon pour la concurence des accé il n'y a aucun probleme moi j ai +thread qui utilisent les meme fonctions d'une de mes dll et ca marche sans probleme.
j'espere t avoir aidé...
bon courage
moi pour le faire j utilise cygwin....
et voici la procedure que j utilise et que je pense portable sur la plupart des compilateur...
donc en 1 je compile 1 a 1 tous les fichier .C
gcc -c -I"les includes particuliers" -o monfichier.o monfichier.c
ensuite je crée un fichier .def qui va referencer l ensemble des fonctions dedans il y a donc qq chose du genre:
EXPORTS
mafonction1
mafonction2
etc...
et ensuite je realise la creation de la dll:
gcc -shared -I"les includes perticuliers(chemin)" -o madll.dll monfichier.c monautrefichier.c monfichierdef.def
et hop tu as ta dll..
Sinon pour la concurence des accé il n'y a aucun probleme moi j ai +thread qui utilisent les meme fonctions d'une de mes dll et ca marche sans probleme.
j'espere t avoir aidé...
bon courage
_julien_
Messages postés
56
Date d'inscription
lundi 31 mai 2004
Statut
Membre
Dernière intervention
31 juillet 2004
17
14 juin 2004 à 09:08
14 juin 2004 à 09:08
Tu peux utiliser MinGW, tu ne seras pas trop perdu comme ca :)
A cette page ils expliquent comment creer une dl:
http://www.mingw.org/docs.shtml -> How to create a dll
--
julien barbier
A cette page ils expliquent comment creer une dl:
http://www.mingw.org/docs.shtml -> How to create a dll
--
julien barbier
Aie, au risque de paraitre difficile, ta solution ne me convient pas. Car avec MinGW, on fait deux trois appels "magiques", et hop, la DLL apparait. Ce qui revient a des assistants. Je n'ai pas droit au solutions "baguette magiques" ! Je dois pouvoir ecrire les makefiles pour n''importe quel compilateur, avec les memes fichiers sources. Et bien sur, pas question de maintenir une version des fichiers pour VC, une pour MinGw, une pour xxx, ...
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
14 juin 2004 à 11:43
14 juin 2004 à 11:43
re,
bon pour le point d'entrée je ne crois pas que cela soit necessair la dll peur ne contenir qu'une succession de fonctions.
Pour le .lib j en ai aucune idée jamais u besoin...
Enfin moi je me sert des dll pour faire du jni..interface avec java...donc je les appel avec java en utilisant la fonction loadlibrary...
Mais je suppose qu en c/c++ c est le meme principe tu charge la lib et apres tu utilise les fonctions direct
bon pour le point d'entrée je ne crois pas que cela soit necessair la dll peur ne contenir qu'une succession de fonctions.
Pour le .lib j en ai aucune idée jamais u besoin...
Enfin moi je me sert des dll pour faire du jni..interface avec java...donc je les appel avec java en utilisant la fonction loadlibrary...
Mais je suppose qu en c/c++ c est le meme principe tu charge la lib et apres tu utilise les fonctions direct
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
14 juin 2004 à 13:13
14 juin 2004 à 13:13
salut Alex et au pays, t'as deja commecencé a coder??
peut etre que ceci va t'aider (c'est vrai que ds la plupart, ils expliquent avec les outils, alors q les gens veulent savoir comment ca marche) : http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_export_from_a_dll.asp
t'as ça aussi : http://www-igm.univ-mlv.fr/~dr/Xpose2001/legeay/
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
peut etre que ceci va t'aider (c'est vrai que ds la plupart, ils expliquent avec les outils, alors q les gens veulent savoir comment ca marche) : http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_export_from_a_dll.asp
t'as ça aussi : http://www-igm.univ-mlv.fr/~dr/Xpose2001/legeay/
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
Salut Tafiscobar
Ton lien et les reponses precedentes m'ont permis de bien avancer, merci beaucoup. Je ne code pas encore, mais j'ai mis au point une conception d'ensemble et elle a ete valide par l'equipe du labo.
Je mets en place la chaine de compilation, plutot complexe, car il faut que ca compile pour Linux, VisualC, BorlandC, et des kits de developpement pour materiel embarques !!!
J'utilise Ant et du Xslt pour generer des scripts specifiques a la plateforme. Du code XML qui genere du code scripts qui genere du code C qui genere les librairies. Ouf !!!!!!!
Ton lien et les reponses precedentes m'ont permis de bien avancer, merci beaucoup. Je ne code pas encore, mais j'ai mis au point une conception d'ensemble et elle a ete valide par l'equipe du labo.
Je mets en place la chaine de compilation, plutot complexe, car il faut que ca compile pour Linux, VisualC, BorlandC, et des kits de developpement pour materiel embarques !!!
J'utilise Ant et du Xslt pour generer des scripts specifiques a la plateforme. Du code XML qui genere du code scripts qui genere du code C qui genere les librairies. Ouf !!!!!!!
Canard007
Messages postés
5929
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
215
15 juin 2004 à 09:53
15 juin 2004 à 09:53
lol
have fun :p
have fun :p
Bonjour
pour créer une DLL, je te conseille d'aller sur le site de microsoft:
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_set_compiler_options.asp.
Moi aussi, je m'amuse à compiler ces DLL, un vrai plaisir....
BOn courage.
Mais si qq a une méthode je suis preneur
Emmanuel
pour créer une DLL, je te conseille d'aller sur le site de microsoft:
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_set_compiler_options.asp.
Moi aussi, je m'amuse à compiler ces DLL, un vrai plaisir....
BOn courage.
Mais si qq a une méthode je suis preneur
Emmanuel
- Imagine que tu est 6 fonctions (fonction1, fonction2,...) a inclure dans ta DLL, decrites dans 4 fichiers C (fichier1.c, fichier2.c,...)
- Imagine que tu est VisualC++ installe.
Voila ma recette :
- Lancer vcvars32.bat
- Fabriquer les .obj pour chaque fichier, ce qui ce fait avec
Il ya une option speciale du compilateur Microsoft pour optimiser specialement pour une DLL...
- Avoir un fichier .DEF (un fichier Ascii tout simple), qui permet de dire quelles fonctions vont figurer dans ta DLL, avec quel nom et quel position... Tu peut aussi preciser d'autres parametres dans .DEF, voir sur MSDN. Ici le fichier aura cette tete :
Les numeros avec @ doivent etre uniques. En fait, j''ai un fichier XML avec mes noms fonctions, et une jolie feuille de style XSLT qui me genere mon .DEF avec les numeros, pour etre sur de faire de doublon. Apellons ce fichier MaDll.def
- Fabriquer la DLL, ce qui est le travail du linker. Elle s''apellera MaDll.dll
Et tu obtiendras 2 fichiers, MaDll.dll ainsi que MaDll.lib.
- Pour utiliser ta dll, tu dois lier l''executable avec MaDll.lib
Mais ma recette n''est pas encore parfaite... Je ne peut pas faire d''entree sorties car elles plantent systematiquement avec un programme qui utilise la Dll (les fonctions d''ES sont dans la DLL). Alors que si je lie statiquement, ca marche. Je ne sais pas pourquoi...
- Imagine que tu est VisualC++ installe.
Voila ma recette :
- Lancer vcvars32.bat
- Fabriquer les .obj pour chaque fichier, ce qui ce fait avec
cl [options de compilations] fichier1.c -Fofichier1.obj -c
Il ya une option speciale du compilateur Microsoft pour optimiser specialement pour une DLL...
- Avoir un fichier .DEF (un fichier Ascii tout simple), qui permet de dire quelles fonctions vont figurer dans ta DLL, avec quel nom et quel position... Tu peut aussi preciser d'autres parametres dans .DEF, voir sur MSDN. Ici le fichier aura cette tete :
DESCRIPTION "Ma DLL avec 6 fonctions" EXPORT fonction1 @1 fonction2 @2 fonction3 @3 fonction4 @4 fonction5 @5 fonction6 @6
Les numeros avec @ doivent etre uniques. En fait, j''ai un fichier XML avec mes noms fonctions, et une jolie feuille de style XSLT qui me genere mon .DEF avec les numeros, pour etre sur de faire de doublon. Apellons ce fichier MaDll.def
- Fabriquer la DLL, ce qui est le travail du linker. Elle s''apellera MaDll.dll
link -dll -def:MaDll.def -out:MaDll.dll fichier1.obj fichier2.obj fichier3.obj fichier4.obj
Et tu obtiendras 2 fichiers, MaDll.dll ainsi que MaDll.lib.
- Pour utiliser ta dll, tu dois lier l''executable avec MaDll.lib
Mais ma recette n''est pas encore parfaite... Je ne peut pas faire d''entree sorties car elles plantent systematiquement avec un programme qui utilise la Dll (les fonctions d''ES sont dans la DLL). Alors que si je lie statiquement, ca marche. Je ne sais pas pourquoi...
14 juin 2004 à 10:30
Bon oui, c'est presque ca... Mais quelques precisions me seraient precieuses :
1/ Comment tu definis le point d'entree dans ta DLL (L'equivalent du main poun programme classique) ?
2/ J'ai lu qui fallait generer un .lib, pour des raisons obscures...
3/ Comment j''accede au fonctions de la DLL, sachant que je possede les headers de ces fonctions ?