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

Visual C++ Discussion :

Visual C++ 2008 Express : Cr�ation d'une DLL - Probl�me de link


Sujet :

Visual C++

  1. #1
    Membre � l'essai
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6
    Par d�faut Visual C++ 2008 Express : Cr�ation d'une DLL - Probl�me de link
    Bonjour � tous,

    Etant un peu novice en programmation bas niveau, j'aurais besoin d'un petit coup de main.

    Afin de commencer un projet de d�veloppement, je dispose d'un fichier .c et des fichiers .h n�cessaires pour g�n�rer une DLL (qui, par la suite, sera utilis�e par le logiciel PureData). Ces fichiers ont �t� cod�s par une autre personne plusieurs ann�es auparavant.

    J'utilise Visual C++ 2008 Express Edition. Le code dont je dispose, quant � lui, a �t� r�alis� sous une version ant�rieure de Visual C++ et sous une version ant�rieure de Windows.

    Pour compiler j'utilise un protocole tr�s d�taill�, qui a �t� donn� sur le topic du forum suivant (voir le cinqui�me message du topic) :

    http://puredata.hurleur.com/sujet-10...ternal-windows

    A noter que mon programme s'appelle M2M~.c et non helloworld.c comme dans le lien pr�c�dent. En outre, je dispose de plusieurs fichiers d'ent�te.

    J'arrive jusqu'� l'�tape 9 du protocole : lors de la compilation j'ai une erreur au moment de l'�dition des liens :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    1   Compilation en cours...
    2   M2M~.c
    3   Édition des liens en cours...
    4   LINK : error LNK2001: symbole externe non résolu M2M~_setup
    5   C:\Users\Teaiki\Documents\Visual Studio 2008\Projects\M2M~\Debug \M2M~.lib : fatal error LNK1120: 1 externes non résolus
    En me renseignant sur le web, j'ai cru comprendre que le compilateur n'arrive pas � faire le lien entre les diff�rents modules du programme. Mais je ne sais pas quoi faire, c'est un peu flou pour moi.

    Je vous remercie pour toute aide �ventuelle, cela me permettrait de commencer mon projet.

    Teaiki

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Bonjour et bienvenu,
    Tu as du oubli� d'ajouter un fichier source � ton projet? Ou alors tu as des directives de compilation non d�finies?

  3. #3
    Membre � l'essai
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6
    Par d�faut
    Bonjour,

    Merci pour la r�ponse.

    Citation Envoy� par 3DArchi Voir le message
    Bonjour et bienvenu,
    Tu as du oubli� d'ajouter un fichier source � ton projet? Ou alors tu as des directives de compilation non d�finies?
    En fait, j'ai ajout� tous les fichiers que l'on m'a transmis (le fichier source et les fichiers d'ent�te). Et le programme fonctionnait � l'�poque (quand l'auteur du programme l'a �crit). Donc �a doit probablement �tre la seconde solution.

    Je vais quand m�me rev�rifier aupr�s de mon responsable qu'on m'a bien transmis tous les fichiers n�cessaires.

    Si on suppose que j'ai des directives de compilation non d�finies, et sachant que j'ai suivi � la lettre le protocole dont j'ai donn� le lien dans mon premier message, est-ce que cela voudrait dire qu'il y a des directives de compilations suppl�mentaires � sp�cifier lorsqu'on a plusieurs fichiers d'ent�te? Ou est-ce qu'il y a des directives de compilation suppl�mentaires � sp�cifier sur Visual C++ 2008 (le protocole est fait avec Visual C++ 2005)?

    Merci pour toute �ventuelle r�ponse.

  4. #4
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Une autre piste peut �tre que le r�pertoire de recherche des fichiers lib est mal renseign� et qu'il n'arrive pas � trouver le .lib.
    Pourquoi il y a des '~' dans les traces que tu envois (et sp�cifiquement M2M~_setup )? Peux-tu poster le .h/.c qui est suppos� correspondre ?

  5. #5
    Membre � l'essai
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6
    Par d�faut
    Merci pour la r�ponse,

    En fait le hic, c'est qu'on m'a demand� de ne pas distribuer les fichiers qu'on m'a pass�.

    Je peux n�anmoins mettre une fraction du fichier .c (j'ai j'ai retir� les 900 lignes de codes restantes) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    #include "m_pd.h"
    #include "p2c.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "nrutil.h"
    J'ai bien inclus dans le projet, les fichiers m_pd.h, p2c.h et nrutil.h en tant que fichiers d'ent�te.

    Sinon, j'ai remarqu� que quand j'essayais de compiler avec MinGW, j'avais des "undefined reference to malloc" (ou bien fprintf, log, etc...), ce qui veut peut-�tre dire qu'il a un probl�me aussi avec les stdio.h, stdlib.h et math.h.

    Alors pour le '~', je n'ai aucune id�e de pourquoi celui qui a �crit ce code l'a appel� comme �a (le fichier que j'ai r�cup�r� s'appelle M2M~.c). Et suivant le protocole que j'ai suivi, j'ai mis b�tement "/export:M2M~_setup" dans les options suppl�mentaires de ligne de commande (Propri�t�s de M2M~->Propri�t�s de configuration->Editeur de liens->Lignes de commande->Options suppl�mentaires).

    Sinon, j'ai des questions qui peut para�tre idiote : Doit-on mettre le .lib dans un r�pertoire particulier? Est-ce qu'il doit forc�ment y avoir un M2M~.lib (je n'en ai pas re�u)? Si oui, est-ce que je dois en fabriquer un � partir du code .c (et comment faire)? Ou est-ce que je suis cens� l'avoir d�j� disposition.

    Merci pour toute aide �ventuelle.

    Teaiki

  6. #6
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Ce qui me g�ne, c'est qu'on n'est pas sens� avoir de '~' dans un nom de fonction. Au vu de ce que tu dis, ce serait alors l'option '/export:M2M~_setup' qui ne serait pas bonne. D'o� est suppos�e venir cette m�thode M2M~_setup ? Elle doit �tre dans un .h? Sous cette forme ?

    Pour r�pondre � ta question sur les .lib. (Mes remarques �taient des pistes puisque je ne connais pas ton environnement). Soit on t'a fourni que des sources, auquel cas tu les rajoutes seulement dans les fichiers � compiler ton projet. Soit on t'as fournis aussi des librairies (donc des .lib), au quel cas il faut dire � Visual de lier ton projet avec ces librairies. Mais tu semble dire que tu n'as pas de tel .lib. Ce qui indique qu'on se trouve dans la premi�re hypoth�se (que des sources). Pour info, les .lib se mettent o� tu veux : ensuite soit tu mets le chemin complet dans les options du link vers la biblioth�que, soit tu sp�cifie dans Visual, les r�pertoires o� chercher ces biblioth�ques.

    Pour ton pb sur "undefined reference to trucmuche" : en g�n�ral cela se produit dans des fichiers sources o� tu utilises ces fonctions mais tu n'as pas fait l'include de l'en-t�te ad�quat. Ca n'est pas grave en soit, mais �a s'appelle un code mal �crit

  7. #7
    Membre � l'essai
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6
    Par d�faut
    Merci d'avoir �clair� ces points obscures pour moi,

    En fait on ne m'a pas fourni de .lib, mais en suivant le protocole que j'ai cit� plus haut, j'ai �t� ammen� � t�l�charger une librairie pd.lib (qui vient des cr�ateurs du logiciel PureData et qui contient des choses utiles pour compiler des DLL pour PureData). (Excusez-moi du fait que ce soit en anglais et non en fran�ais)

    d. Tell linker where to find pd.lib:
    1. In the left pane, select Configuration Properties >> Linker >> Input.
    2. In the right pane, select Additional Dependencies and enter
    C://TEMP/pd.lib.


    Comme je suis sous Vista et non sous XP (OS du protocole que j'ai suivi) je n'ai pas de r�pertoire C://TEMP/. Donc j'ai mis le .lib dans un autre r�pertoire, mais si j'ai bien compris, cela n'a pas d'importance du moment que l'on sp�cifie � Visual C++ le bon r�pertoire o� il faut aller chercher le .lib.

    Est-ce que cela pourrait vouloir dire qu'il me manque d'autres .lib dont je n'ai pas connaissance, ou que pd.lib est d�faillant?

    Mon responsable vient de me faire savoir qu'il arrive � le compiler sous MacOS (sans le .lib a priori, car ce n'est pas lui qui me l'a fourni).

    Pour la methode M2M~_setup : j'ai suivi le protocole, � la lettre (dans le protocole il est question de compiler helloworld.c) :


    e. Tell linker to export the setup function:
    1. In the left pane, select
    Configuration Properties >> Linker >> Command Line.
    2. In the right pane, type
    /export:helloworld_setup in the Additional options field.
    3. Click OK.


    Pour le "undefined reference to..." : ce sont il ne trouve pas des fonctions telles que fprintf ou malloc, qui sont cens�es �tre comprises dans stdlib.h ou bien stdio.h. Et il y a bien le #include<stdlib.h> et #include<stdio.h> dans le fameux M2M~.c. Je sais pas trop ce que pourrait vouloir dire.

    Merci pour toute aide.

    Teaiki

  8. #8
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Hypoth�se :tu as un probl�me de configuration des r�pertoires de Visual ?
    Menu Tool/Options
    Onglet Projects and Solutions / VC++ Directories
    Ensuite Show directories for -> Include files et Library files � v�rifier.
    (enfin, c'est ce que j'ai comme menus pour VS Express sous XP).

  9. #9
    Membre � l'essai
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6
    Par d�faut
    Merci pour ces pr�cisions,

    Il y a du nouveau... Comme je d�bute en Visual C++, je viens de remarquer, gr�ce au outils de VC, qu'il existe une m�thode M2M_tilde_setup(void) dans le fichier M2M~.c, qui ressemble dans sa structure a la fonction helloworld_setup(void) que je viens de regarder sur le web. Donc je me suis empress� de remplacer "/export:M2M~_setup" par "/export:M2M_tilde_setup".

    Je sais pas si c'est mieux mais j'obtiens :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    Édition des liens en cours...
       Création de la bibliothèque C:\Users\Teaiki\Documents\Visual Studio 2008\Projects\M2M~\Debug\M2M~.lib et de l'objet C:\Users\Teaiki\Documents\Visual Studio 2008\Projects\M2M~\Debug\M2M~.exp
    M2M~.obj : error LNK2001: symbole externe non résolu _s_signal
    C:\Users\Teaiki\Documents\Visual Studio 2008\Projects\M2M~\Debug\M2M~.dll : fatal error LNK1120: 1 externes non résolus
    Apparement il y a encore un probl�me de link, concernant une m�thode "_s_signal" que je n'arrive pas � trouver dans le code (ctrl+f).

    Pourtant ce m�me code fonctionne sur MacOS...

    Je viens �galement de v�rifier les Include files et Library files comme vous me l'aviez sugg�r� et j'ai :

    pour les Include files:

    $(VCInstallDir)include
    $(VCInstallDir)atlmfc\include
    $(WindowsSdkDir)\include
    $(FrameworkSDKDir)include


    pour les Library files

    $(VCInstallDir)lib
    $(VCInstallDir)atlmfc\lib
    $(VCInstallDir)atlmfc\lib\i386
    $(WindowsSdkDir)\lib
    $(FrameworkSDKDir)lib
    $(VSInstallDir)
    $(VSInstallDir)lib


    Est-ce que je suis cens� retrouver les .h et .lib sp�cifiques au M2M~.c?

    Merci pour toute aide.

    Teaiki

  10. #10
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par teaiki Voir le message
    Apparement il y a encore un probl�me de link, concernant une m�thode "_s_signal" que je n'arrive pas � trouver dans le code (ctrl+f).
    Pourtant elle doit �tre quelque part car ce n'est pas la signature standard de signal ?
    Citation Envoy� par teaiki Voir le message
    Est-ce que je suis cens� retrouver les .h et .lib sp�cifiques au M2M~.c?
    Les .h s'ils sont � la racine du projet (ou inclus via un chemin relatif), non.
    Les .lib, il me semble que tu m'as dit qu'il n'y en avait pas. Sinon, il faut mettre le chemin qui permet d'y acc�der en fonction de ce qui est mis dans les options de link comme biblioth�que suppl�mentaire.

  11. #11
    Membre � l'essai
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2009
    Messages
    6
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6
    Par d�faut
    Bonjour,

    Merci pour tes r�ponses.

    En fait c'est quoi la signature standard de signal? J'ai essay� de me renseigner sur le web mais j'ai pas trouv�.

    Merci pour toute aide.

    Teaiki

Discussions similaires

  1. R�ponses: 8
    Dernier message: 27/07/2012, 14h59
  2. R�ponses: 4
    Dernier message: 02/11/2009, 16h49
  3. Faire une belle interface avec MS Visual C# 2008 express
    Par pdtor dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 15/04/2009, 14h08
  4. Affichage d'une page Web en Visual Basic 2008 Express Edition
    Par Harry Covair dans le forum Windows Forms
    R�ponses: 1
    Dernier message: 30/06/2008, 00h54
  5. R�ponses: 3
    Dernier message: 02/08/2005, 09h24

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