Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670

    [C++] Linker error: Undefined reference to 'test'

    Ciao a tutti,
    Devo creare una DLL con una semplice funzione che sia richiamabile dall'esterno. Sto utilizzando Dev-C++.

    Ho creato un nuovo progetto, con solamente un file chiamato prova.cpp
    Il codice presente nel file è il seguente:

    codice:
    #define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
    
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    #define MT4_EXPFUNC __declspec(dllexport)
    
    
    BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){
    //----
        switch(ul_reason_for_call){
            case DLL_PROCESS_ATTACH:
            case DLL_THREAD_ATTACH:
            case DLL_THREAD_DETACH:
            case DLL_PROCESS_DETACH:
            break;
        }
    //----
        return(TRUE);
    }
    
    MT4_EXPFUNC bool __stdcall test(char* k){
        return (TRUE);
    }
    Per rendere disponibile la funzione dall'esterno ho creato un file (prova.def), con il seguente testo:

    codice:
    LIBRARY prova
    
    EXPORTS test

    Quando vado a compilare, mi viene restituito il seguente errore:

    [Linker error]undefined reference to 'test'

    Ho aggiunto questo file al linker, con il seguente comando:

    --def prova.def

    Come posso risolvere questo problema?
    Grazie mille


  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Nel progetto che hai scritto e che usa la DLL, hai inserito il riferimento al file .lib (per il linker) ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    File .lib ?

    Dev-C++ non mi ha creato un file del genere.

    Come dicevo, nel progetto ho solo quel prova.cpp con il codice sopra citato.
    Poi al progetto ho aggiunto prova.def per l'elenco delle funzioni richiamabili dall'esterno (che in questo caso è una).

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ricominciamo ... tu hai scritto un progetto per realizzare una DLL e un altro progetto per provare la DLL?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    Bravissimo, ho creato un nuovo progetto per creare una DLL che avvesse all'interno delle funzioni da poter richiamare da un altro linguaggio. Solo che, come ti dicevo, non riesco a compilare del tutto la DLL perché visualizzo quell'errore.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quindi l'errore lo hai nel compilare la DLL o nel compilare il programma che userà la DLL ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    Nel compilare la DLL.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ok ... allora prova ad utilizzare la specifica

    extern "C"

    per la funzione test

    codice:
    extern "C" {
      MT4_EXPFUNC bool __stdcall test(char* k){
        return (TRUE);
      }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    670
    Cosi sembra funzionare, però ho il seguente messaggio:

    resolving _key by linking to _key@8

    Questo comando che mi hai dato cosa farebbe?
    Mettendo questa extern il file .def non serve piu a nulla?

    Grazie mille Oregon

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da ombra
    Cosi sembra funzionare, però ho il seguente messaggio:

    resolving _key by linking to _key@8
    Non ho idea ... mi sembra si riferisca a parti di codice che non hai mostrato ...

    Questo comando che mi hai dato cosa farebbe?
    Mettendo questa extern il file .def non serve piu a nulla?
    Indica al compilatore di generare il nome del simbolo senza "mangling" in modo da corrispondere a cio' che è indicato nel .def (che è necessario).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.