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

C++ Discussion :

Problème de LInkage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Par défaut Problème de LInkage
    Bonjour,

    J'essai de réaliser un programme qui me permet de transformer une matrice symétrique en une matrice symétrique défini positive. Pour ce faire je dois importer des bibliothèques extérieures (Newmat), cependant quand je genère la solution, j'ai des problèmes de LInkage, vous savez comment on peut remediez à ca ?
    Je pense qu'il faut que je visualise l'ordre dans lequel il les lie mais je n'arrive pas.

    Merci d'avance de votre aide
    Voici le fichier de sortie :

    ------ Début de la régénération globale*: Projet*: CorrelSimul, Configuration*: Debug Win32 ------

    Supprimer des fichiers de sortie et des fichiers intermédiaires du projet 'CorrelSimul', configuration 'Debug|Win32'.
    Compilation...
    Stdafx.cpp
    Compilation...
    evalue.cpp
    newmat\evalue.cpp(19) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\evalue.cpp(17)*: voir la définition précédente de 'REPORT'
    newmat\evalue.cpp(298) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Submat.cpp
    newmat\SUBMAT.CPP(17) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\SUBMAT.CPP(15)*: voir la définition précédente de 'REPORT'
    newmat\SUBMAT.CPP(430) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Solution.cpp
    newmat\SOLUTION.CPP(201) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Sl_ex.cpp
    newmat\SL_EX.CPP(35) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmatex.cpp
    newmat\NEWMATEX.CPP(308) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat9.cpp
    newmat\NEWMAT9.CPP(23) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT9.CPP(21)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT9.CPP(77) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat8.cpp
    newmat\NEWMAT8.CPP(21) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT8.CPP(19)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT8.CPP(736) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat7.cpp
    newmat\NEWMAT7.CPP(18) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT7.CPP(16)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT7.CPP(1053) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat6.cpp
    newmat\NEWMAT6.CPP(19) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT6.CPP(17)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT6.CPP(1125) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat5.cpp
    newmat\NEWMAT5.CPP(20) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT5.CPP(18)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT5.CPP(564) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat4.cpp
    newmat\NEWMAT4.CPP(19) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT4.CPP(17)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT4.CPP(951) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat3.cpp
    newmat\NEWMAT3.CPP(20) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT3.CPP(18)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT3.CPP(843) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat2.cpp
    newmat\NEWMAT2.CPP(20) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT2.CPP(18)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT2.CPP(634) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Newmat1.cpp
    newmat\NEWMAT1.CPP(16) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\NEWMAT1.CPP(14)*: voir la définition précédente de 'REPORT'
    newmat\NEWMAT1.CPP(178) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Myexcept.cpp
    newmat\MYEXCEPT.CPP(486) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    essai.cpp
    essai.cpp(17) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    CorrelSimul.cpp
    Cholesky.cpp
    newmat\CHOLESKY.CPP(19) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\CHOLESKY.CPP(17)*: voir la définition précédente de 'REPORT'
    newmat\CHOLESKY.CPP(89) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Bandmat.cpp
    newmat\BANDMAT.CPP(23) : warning C4005: 'REPORT'*: redéfinition de macro
    newmat\BANDMAT.CPP(21)*: voir la définition précédente de 'REPORT'
    newmat\BANDMAT.CPP(570) : fatal error C1010: fin de fichier inattendue lors de la recherche d'une directive d'en-tête précompilé
    Génération de code en cours...

    Le journal de génération a été enregistré à l'emplacement "file://d:\Documents and Settings\Amor\My Documents\Visual Studio Projects\correlation_c++\Debug\BuildLog.htm"
    CorrelSimul - 18 erreur(s), 13 avertissement(s)


    ---------------------- Terminé ----------------------

    Régénération globale*: 0 a réussi, 1 a échoué, 0 a été ignoré

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca doit être à peu près la question la plus posée...

    Voir la FAQ VC++.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    1. pas un problème de linkage mais de compilation, manifestement
    2. si tu ne maitrises pas les entêtes précompilés (et tu ne serais pas le seul ), un conseil : ne les utilise pas ! A défaut tu risques d'avoir régulièrement des problèmes de compil...

  4. #4
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Par défaut
    J'y arrive décidemment pas !!!!

    Est ce que tu vois une erreur sur la syntaxe suivante parceque la première erreur dans le journal de sortie (voir message précédent) envoi vers la définition de la macro suivante :

    Merci pour ta contribution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef DO_REPORT
        #define REPORT { static ExeCounter ExeCount(__LINE__,17); ++ExeCount; }
    #else
        #define REPORT {}
    #endif

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Par défaut
    Voici ce que j'obtien en enlevant l'option de précompilage, j'ia l'impressin que c'est un problème de linkage sinon pq il y aurait l'erreur 2005

    merci

    ------ Début de la régénération globale*: Projet*: CorrelSimul, Configuration*: Debug Win32 ------

    Supprimer des fichiers de sortie et des fichiers intermédiaires du projet 'CorrelSimul', configuration 'Debug|Win32'.
    Compilation...
    Stdafx.cpp
    Compilation...
    evalue.cpp
    Submat.cpp
    Solution.cpp
    Sl_ex.cpp
    Newmatex.cpp
    Newmat9.cpp
    Newmat8.cpp
    Newmat7.cpp
    Newmat6.cpp
    Newmat5.cpp
    Newmat4.cpp
    Newmat3.cpp
    Newmat2.cpp
    Newmat1.cpp
    Myexcept.cpp
    essai.cpp
    CorrelSimul.cpp
    Cholesky.cpp
    Bandmat.cpp
    Génération de code en cours...
    Édition des liens en cours...
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) déjà défini(e) dans libcpmtd.lib(newop.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) déjà défini(e) dans LIBCMTD.lib(dbgdel.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) déjà défini(e) dans libcpmtd.lib(newaop.obj)
    nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) déjà défini(e) dans LIBCMTD.lib(delete2.obj)
    evalue.obj : error LNK2001: symbole externe non résolu "void __cdecl SortSV(class DiagonalMatrix &,class Matrix &,bool)" (?SortSV@@$$FYAXAAVDiagonalMatrix@@AAVMatrix@@_N@Z)
    Debug/CorrelSimul.dll : fatal error LNK1120: 1 externes non résolus

    Le journal de génération a été enregistré à l'emplacement "file://d:\Documents and Settings\Amor\My Documents\Visual Studio Projects\correlation_c++\Debug\BuildLog.htm"
    CorrelSimul - 6 erreur(s), 0 avertissement(s)


    ---------------------- Terminé ----------------------

    Régénération globale*: 0 a réussi, 1 a échoué, 0 a été ignoré

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par iamor
    Voici ce que j'obtien en enlevant l'option de précompilage, j'ia l'impressin que c'est un problème de linkage sinon pq il y aurait l'erreur 2005
    Maintenant c'est un problème de linkage, mais pas dans le 1er post.

    Ca ressemble à un conflit de libs entre lib C, lib C++ et libs MFC.

    J'imagine que c'est un projet MFC ? Comment l'as-tu créé ?

  7. #7
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Par défaut
    Merci de ta réponse, mais pas du tout ce n'est pas un projet MFC, il s'agit d'un simple programme qui utilise les bibliothèques newmat dont le lien est le suivant: http://www.robertnz.net/nm10.htm
    Le programme en soit est le suivant :

    Il est repertorié sous le nom correlSimul.cpp

    // Il s'agit du fichier DLL principal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include "stdafx.h"
     
    #include "CorrelSimul.h"
     
    ReturnMatrix chol(const SymmetricMatrix& correlation)
    {
        //renvoie la dimension de la matrice de corrélation
        ArrayLengthSpecifier dimension(correlation.Nrows());
        int dimension1 = correlation.Nrows();
        //initialise le test de défini positivité à faux
        bool test=false;
        //diagonalise la matrice de corrélation
        DiagonalMatrix D(dimension);
        // Comment est faite cette déclaration?
        Matrix V(dimension1,dimension1);
        LowerTriangularMatrix L(dimension);
        Matrix resultat;
        //renvoie les valeurs propres
        EigenValues(correlation,D,V);
        //
        if (D(1)<=0) test=true;
     
        if (test=false) 
        {
            L = Cholesky(correlation);
            resultat=L;
        }
        else
        {
            for (int i = 1; i <= dimension1; i++)
            {
                D(i)=sqrt(max(D(i),0)); /* on transforme D en D+ puis en (D+)^1/2 
                                        pour prendre la racine carrée */
            }
     
            resultat=V*D*V.t();
        }
     
        D.Release();
        V.Release();
        L.Release();
        return resultat;
    }
     
    ReturnMatrix simind(const int& nbre_noms)
    {
        //créer une matrice colonne epsilon
        ColumnVector epsilon;
        //remplis la matrice colonne par les noms des ditres
        epsilon.ReSize(nbre_noms);
        for (int i=1;  i<=nbre_noms; ++i)
        {   
            epsilon(i)=(double)normal_random();
        }
        epsilon.Release();
        return epsilon;
    }


    Pour le fichier correlSimul.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //Specifies that the file will be included (opened) only once by the compiler in a build. 
    //This can reduce build times as the compiler will not open and read the file
    //after the first #include of the module.
     
    #pragma once
     
    using namespace System;
     
    namespace CorrelSimul
    {
        public __gc class Class1
        {
            // TODO*: ajoutez ici vos méthodes pour cette classe.
        };
    }
    ReturnMatrix chol(const SymmetricMatrix& correlation);
    ReturnMatrix simind(const int& nbre_noms);
    ReturnMatrix simcor(const int& nbre_noms, const double& rho);
    ReturnMatrix spreads(const Matrix& lambda, const ColumnVector& T, const Matrix& r, const ColumnVector& sigma, const ColumnVector& defaut, 
                         const ColumnVector& x, const double& correlation, const int& nbre_noms,const int& no_steps);

    POur le tester j'utilise la main suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include "essai.h"
     
     
    void main ()
    {
     
        SymmetricMatrix A(3);
        A.Row(1)<< 0.4;
        A.Row(2)<< 0.35<<0.4;
        A.Row(3)<<0.2<<0.3<<0.4;
        Matrix C;
        C=chol(A);
        cout << "le premier élément de la matrice de Cholesky est : " << C(1,1) << "\n";
    }
    Mais il faut d'abord qu'il n'y ai pas toutes ces erreurs !

    Merci vraiment pour ton aide !

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

Discussions similaires

  1. Code::Blocks sous Linux problème de linkage
    Par Invité dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 22/03/2006, 16h54
  2. [Code::Blocks] Problème de linkage: "msvcrt.lib"
    Par skhay dans le forum Code::Blocks
    Réponses: 8
    Dernier message: 14/03/2006, 19h39
  3. Plusieurs fichiers => Problème de Linkage
    Par loic911 dans le forum C++
    Réponses: 6
    Dernier message: 01/03/2006, 00h11
  4. Problème de linkage avec la librairie DevIl
    Par Drannor dans le forum DevIL
    Réponses: 1
    Dernier message: 18/01/2006, 23h05
  5. Problème de linkage
    Par lvdnono dans le forum Windows
    Réponses: 4
    Dernier message: 15/06/2004, 12h32

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