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 :

Erreur édition de lien LNK2019 et LNK2001


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut Erreur édition de lien LNK2019 et LNK2001
    Bonjour,

    J'essaye d'intégrer une application à une autre application. j'ai donc copier mes fichiers de la première application à la seconde. J'ai corrigé plusieurs problèmes mais il me reste ces erreurs à l'édition de liens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1>NVAPIExample.obj : error LNK2019: symbole externe non résolu "long __cdecl GetInterface(struct IUnknown *,void * *)" (?GetInterface@@YAJPAUIUnknown@@PAPAX@Z) référencé dans la fonction "protected: virtual long __stdcall BaseObj::QueryInterface(struct _GUID const &,void * *)" (?QueryInterface@BaseObj@@MAGJABU_GUID@@PAPAX@Z)
    1>NVAPIExampleDlg.obj : error LNK2001: symbole externe non résolu "long __cdecl GetInterface(struct IUnknown *,void * *)" (?GetInterface@@YAJPAUIUnknown@@PAPAX@Z)
    1>PagePreview.obj : error LNK2001: symbole externe non résolu "long __cdecl GetInterface(struct IUnknown *,void * *)" (?GetInterface@@YAJPAUIUnknown@@PAPAX@Z)
    1>Debug/Amisco Organizer.exe : fatal error LNK1120: 1 externes non résolus
    Pour la première je peux donner le code du fichier BaseObj.h. Pour les autres je ne sais pas d'où elles sortent.

    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
    #ifndef BASEOBJ_H
    #define BASEOBJ_H
     
    HRESULT GetInterface(LPUNKNOWN pUnk, void **ppv);
     
    class BaseObj: public IUnknown
    {
    protected:
      BaseObj(): m_refCount(1) {}
      virtual ~BaseObj() {}
     
      STDMETHODIMP QueryInterface(REFIID riid, void** ppv)
      {
        if (riid == IID_IUnknown)
          return GetInterface(static_cast<IUnknown*>(this), ppv);
        else
          return InternalQueryInterface(riid, ppv);
      }
      STDMETHODIMP_(ULONG) AddRef() { return InterlockedIncrement((LONG*)&m_refCount); }
      STDMETHODIMP_(ULONG) Release() { ULONG r = InterlockedDecrement((LONG*)&m_refCount); if (r) return r; delete this; return 0; }
     
      virtual HRESULT InternalQueryInterface(REFIID riid, void** ppv) { return E_NOINTERFACE; }
     
      ULONG m_refCount;
    };
     
    #define IMPL_IUNKNOWN \
    STDMETHODIMP QueryInterface(REFIID riid, void** ppv) { return BaseObj::QueryInterface(riid, ppv); } \
    STDMETHODIMP_(ULONG) AddRef() { return BaseObj::AddRef(); } \
    STDMETHODIMP_(ULONG) Release() { return BaseObj::Release(); }
     
    #define IMPL_INTERFACE(IFNAME) \
    HRESULT InternalQueryInterface(REFIID riid, void** ppv) \
    { \
      if (riid == __uuidof(IFNAME)) \
      return ::GetInterface(static_cast<IFNAME*>(this), ppv); \
      else \
        return BaseObj::InternalQueryInterface(riid, ppv); \
    }
     
    #endif
    Quelqu'un aurait une piste au niveau des options de Visual à choisir ? Ou sur ce bout de code ?

    Merci,

    Sly

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 68
    Par défaut
    bonjour ,
    regarde sur msdn il y a les erreurs que tu indique (LNK2019 et LNK2001) , celà ma beaucoup aider .

    http://msdn.microsoft.com/fr-fr/library/799kze2z.aspx


  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par défaut Erreur LNK 2019 LNK 1120 avec JNI
    Bonjour,

    je rencontre également la meme erreur. et j'ai regardé sur le site de microsoft. J'avoue j'y pige rien.

    Je cherche à utiliser plusieurs méthode d'une classe java via une methode C++. La solution la plus simple d'apres les forum est JNI. Lors de la Creation de la JVM je rencontre cette erreur qui me donne envie de manger mon clavier.

    Mon environnement:
    Windows XP Pro 64 bit
    Visual Studio Team system 2008 (Visual studio 2008)
    JDK 1.6.10

    J'ai ajouté les path pour trouver le fichier jni.h
    J'ai ajouté le path pour trouver la lib JVM.lib

    code C++ toto.cpp
    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
     
    #include <iostream>
    #include "toto.h"
    #include <jni.h>
     
    using namespace std;
    #define USER_CLASSPATH "C:\\Documents and Settings\\pb3\\workspace\\Test\\bin" /* where Prog.class is */
    #pragma comment(lib, "jvm.lib")
     
     
    void toto::essai()
    	{
    		cout << "Hello World!\n";
    	}
     
    void toto::CreateJVM()
    {
    	JavaVM *jvm;       /* denotes a Java VM */
        JNIEnv *env;       /* pointer to native method interface */
        JavaVMInitArgs vm_args; /* JDK 1.1 VM initialization arguments */
    	jclass cls;
    	jmethodID mid;
    	JavaVMOption options[1];
         options[0].optionString =
             "-Djava.class.path=" USER_CLASSPATH;
     
        vm_args.version = 0x00010002; /* New in 1.1.2: VM version */
    	vm_args.options = options;
        vm_args.nOptions = 1;
    	vm_args.ignoreUnrecognized = JNI_TRUE;
     
     
        //vm_args.classpath = ...;
        /* load and initialize a Java VM, return a JNI interface 
         * pointer in env */
        JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
        /* invoke the Main.test method using the JNI */
        cls = (*env).FindClass("JVMtest");
        mid = (*env).GetStaticMethodID(cls, "main", "(I)V");
        (*env).CallStaticVoidMethod(cls, mid, 100);
        /* We are done. */
        (*jvm).DestroyJavaVM();
    }
     
    	int main()
    	{	
    		toto a;
    		a.essai();
    		a.CreateJVM ();
    	}
    code Java JVMtest.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class JVMtest {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		System.out.println("Sitting on top the world");
     
    	}
     
    }
    error LNK2019: unresolved external symbol __imp__JNI_CreateJavaVM@12 referenced in function "public: void __thiscall toto::CreateJVM(void)" (?CreateJVM@toto@@QAEXXZ) toto.obj

    fatal error LNK1120: 1 unresolved externals C:\Documents and Settings\pb3\My Documents\Visual Studio 2008\Projects\JVM\Debug\JVM.exe

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 23
    Par défaut
    j'ai trouvé ma reponse:

    Comme je lai dit je suis en 64 bit or je travaille sur un environnement 32 sur VSTS et j'ai include les fichier JDK 1.6.10 en 64 bit

    Trop nul

    Ca m'a fait du bien de vous parlez les mecs (meme si vous n'aviez pas eu le tps de me repondre)

  5. #5
    Membre confirmé Avatar de sly078
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut
    Le problème de ti_angelo a été résolu (brillamment par lui-même) mais pas le mien. J'enlève donc le tag [Résolu].

    J'avais déjà regardé sur MSDN, j'ai regardé à nouveau et cela ne m'a pas aidé.

    Compiler en mode debug ou release n'y change rien (merci quand même vanitom pour l'idée).

    J'ai essayé d'avoir le code minimum qui provoque l'erreur d'édition de lien. J'ai donc le fichier BaseObj.h dont j'ai donné le code dans le premier message. Et en plus j'ai une classe CPagePreview qui hérite de BaseObj et qui provoque l'erreur ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IMPL_IUNKNOWN
    IMPL_INTERFACE(NeroVisionAPI::IPreviewCallback)
    Je rappelle que j'ai un projet VS2008 dans lequel l'erreur n'apparait pas. Voici les lignes de commandes C++ et Linker pour ce projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /Od /I "C:\Adrien Mayer\nero\NeroSDK-1.08\NeroAPI\Include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /FD /EHsc /RTC1 /MTd /Yu"stdafx.h" /Fp".\Debug/NVAPIExample.pch" /Fo".\Debug/" /Fd".\Debug/" /FR".\Debug\\" /W3 /nologo /c /ZI /errorReport:prompt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /VERBOSE /OUT:".\Debug/NVAPIExample.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:".\Debug\NVAPIExample.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /NODEFAULTLIB:"libc.lib" /NODEFAULTLIB:"libcmt.lib" /NODEFAULTLIB:"msvcrt.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"msvcrtd.lib" /DELAYLOAD:"OleAcc.dll" /DEBUG /PDB:".\Debug/NVAPIExample.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:PROMPT NeroAPIGlue.lib "C:\Adrien Mayer\nero\NeroSDK-1.08\NeroAPI\Lib\NeroAPIGlue.lib" DelayImp.lib
    Le projet dans lequel j'essaye d'intégrer le projet précédent (et qui provoque l'erreur) à été migré de VS 2005 sans soucis. Voile les lignes de commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /Od /I "C:\Adrien Mayer\nero\NeroSDK-1.08\NeroAPI\Include" /D "OEMRESOURCE" /D "_CRT_SECURE_NO_DEPRECATE" /D "_ORG_IMAGE_MANAGEMENT" /D "_VC80_UPGRADE=0x0710" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /Yu"stdafx.h" /Fp"Debug\Amisco Organizer.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /VERBOSE /OUT:"Debug/Amisco Organizer.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\Amisco Organizer.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /NODEFAULTLIB:"libc.lib" /NODEFAULTLIB:"libcmt.lib" /NODEFAULTLIB:"msvcrt.lib" /NODEFAULTLIB:"libcd.lib" /NODEFAULTLIB:"msvcrtd.lib" /DELAYLOAD:"OleAcc.dll" /DEBUG /PDB:"c:\Documents and Settings\admuser\Mes documents\Visual Studio 2008\Projects\Organizer\Debug\Amisco Organizer.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:PROMPT NeroAPIGlue.lib strmiids.lib dxerr9.lib vfw32.lib DelayImp.lib
    J'ai ajouté le mode VERBOSE pour essayer d'y voir plus clair mais ils donnent la même chose au niveau de référence à un QueryInterface...

    Si ça peut donner des idées à quelqu'un...

Discussions similaires

  1. Erreur édition de lien de membres statiques
    Par Kromagg dans le forum C++
    Réponses: 4
    Dernier message: 08/09/2011, 18h27
  2. [Lazarus] Erreur édition des liens (linking) dans programme d'essais mysql
    Par over_score dans le forum Lazarus
    Réponses: 1
    Dernier message: 13/07/2009, 10h51
  3. Erreur édition des liens
    Par vinzzzz dans le forum Fortran
    Réponses: 7
    Dernier message: 18/04/2007, 16h10
  4. Réponses: 7
    Dernier message: 29/06/2006, 08h54
  5. erreur édition de lien
    Par poukill dans le forum C++
    Réponses: 3
    Dernier message: 17/03/2006, 14h48

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