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++

Vue hybride

teaiki Visual C++ 2008 Express :... 03/02/2009, 23h30
3DArchi Bonjour et bienvenu, Tu as... 04/02/2009, 09h15
teaiki Bonjour, Merci pour la... 04/02/2009, 12h52
3DArchi Une autre piste peut être que... 04/02/2009, 13h42
teaiki Merci pour la réponse, En... 04/02/2009, 14h21
Message précédent Message précédent   Message suivant Message suivant
  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

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. Conventions à utiliser pour la création d'une DLL
    Par Writer dans le forum Langage
    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