IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres éditeurs Discussion :

créer un dll avec gcc (MinGW)


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut créer un dll avec gcc (MinGW)
    Bonjour

    je souhaite créer une librairie dll à partir de code C et avec mingw (donc sous windows). Plus précisément, j'ai plusieurs fichiers sources (file1.c, file2.c, ...) et je voudrais savoir comment j'obtiens le fichier nom.dll (quelles sont les étapes de compilation) ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Merci pour le lien. J'ai fait exactement ce qui est dit et ça ne marche pas. Le code C du fichier dll que je veux obtenir est reparti en trois fichiers .c. L'étape

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gcc -c -DBUILD_DLL file1.c file2.c file3.c -I C:\Tcl\include
    me donne 3 fichiers .o (l'option -I est nécessaire car j'utilise la librairie tcl.h).
    Par contre, l'étape

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gcc -shared -o file.dll -Wl,--out-implib,libtstdll.a file1.o file2.o file3.o
    me donne plusieurs erreurs du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     file1.o:file1.c:(.text +0xcf): undefined reference to '_imp__Tcl_GetDoubleFromObj'
    Les "undefined reference" portent sur les fonctions de tcl.h que j'utilise dans file1.c.

    Des idées sur l'origine de cette erreur ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Tu dois linker contre une librairie de Tcl, à priori tclx.y (il t'appartient de remplacer x et y par les bonnes valeurs).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -shared -o file.dll -L C:\Tcl\lib -ltclx.y -Wl,--out-implib,libtstdll.a file1.o file2.o file3.o
    A toi de vérifier que les valeurs et les chemins collent.

  5. #5
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    C'était cela, maintenant, ça marche.

    Merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Par défaut
    Moi aussi j'ai un problème avec le linkage de ma dll mingw :
    (la ligne de commande est celle de code::blocks)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    g++.exe -shared -Wl,--output-def=.\libsound.def -Wl,--out-implib=.\libsound.a -Wl,--dll -LF:\Irrlicht\lib -LF:\wxWidgets-2.8.7\lib -LF:\zlib-1.2.3\lib  .objs\src\gc.o .objs\src\inlines.o .objs\src\engines\sound\engine.o   -o .\sound.dll -pg -lgmon -mthread  -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -lodbc32 -ladvapi32 -lwsock32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid -lstdc++ F:\Irrlicht\old\lib\libirrKlang.a 
     
    .objs\src\engines\sound\engine.o: In function 'ZN85_GLOBAL__N_F__Documents_src_engines_sound_engine.cpp_DFF67DD7_FE9DCE0911engine_implC2EP7GameApp':
    F:/Documents/src/engines/sound/engine.cpp:30: undefined reference to 'std::wcout'
    F:/Documents/src/engines/sound/engine.cpp:30: undefined reference to 'std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::operator<< <wchar_t, std::char_traits<wchar_t> >(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >&, wchar_t const*)'
    F:/Documents/src/engines/sound/engine.cpp:30: undefined reference to 'std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::operator<< <wchar_t, std::char_traits<wchar_t> >(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >&, wchar_t const*)'
    F:/Documents/src/engines/sound/engine.cpp:30: undefined reference to 'std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::endl<wchar_t, std::char_traits<wchar_t> >(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >&)'
    F:/Documents/src/engines/sound/engine.cpp:30: undefined reference to 'std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::operator<<(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& (*)(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >&))'
    F:/Documents/src/engines/sound/engine.cpp:32: undefined reference to 'std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&)'
    etc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ligne 30: std::wcout << "quelquechose," << " autrechose" << std::endl;
    Ligne 32: std::string chaine("chaine");
    Je voudrais savoir ce qu'il faut ajouter pour arrêter ces messages sur la STL.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. compiler dll avec gcc
    Par ayarikhaoulakoukou dans le forum C
    Réponses: 4
    Dernier message: 19/04/2011, 10h46
  2. Réponses: 1
    Dernier message: 09/11/2009, 21h58
  3. [code::blocks] Créer une dll avec des fonctions en C
    Par dewey01 dans le forum Code::Blocks
    Réponses: 0
    Dernier message: 29/09/2008, 15h24
  4. Est ce qu'on peut créer une DLL avec eClipse ?
    Par Chikh001 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/09/2007, 11h00
  5. [Lazarus] Comment créer une DLL avec Lazarus
    Par rajawi00 dans le forum Lazarus
    Réponses: 1
    Dernier message: 19/07/2007, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo