Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [c++]linker e dll

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]linker e dll

    ciao.
    Ho una libreria dll che utilizza una classe C3dVector , i file sono C3dVector.h e C3dVector.cpp , il problema è che anche il progetto che include la libreria utilizza questa classe.
    Quale è il modo migliore per includere e posizionare questi due file nel progetto e nella dll senza avere errori di linker?
    Se includo i file del 3dvector sia nel progetto , sia nella dll è corretto ?
    una volta compilato posso ritrovarmi degli errori di linker o ridefinizione?
    o la dll e il .exe(applicazione principale) lavorano indipendentemente?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [c++]linker e dll

    lavorano indipendentemente
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]funzionamento programmi open source

    grazie Shodan , ti espongo il mio problema in maniera piu dettagliata:
    Ho una libreria .lb con relativa .dll e un progetto base principale.
    Il progetto base accede alla dll.
    Il problema nasce perchè (e per questo te lo chiedo) i software open source hanno tipicamente una cartella "\include" con tutti i .h del progetto dll dove alla fine della compilazione di un progetto vengono copiati tutti i .h del progetto compilato e una "\lib" dove vengono copiate le .lib e dll.
    Ora se io ho uno o piu file che devono essere utilizzati sia dal progetto principale che dalla dll nasce il casino.
    Dato che non vorrei rimuovere i .h del progetto principale mi trovo che se il progetto principale include come percorso .h(una directory da cui andare a pescare i .h della dll,nella pagina proprietà c++ della configurazione)il .h è dichiarato due volte , con relativo errore del linker.
    dovrei rimuovere il .h dalla cartella degli include , ma lo devo mettere altrove?

    esiste un buon sistema per pezzare questo problema?
    o non ho capito bene la filosofia di questi progettiopensource?

    grazie

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Che errore ti da il linker?

    Chiesto questo, l'unico errore di linker che io sappia, riguardo una dll, è sugli entry point delle funzioni: usi una funzione che il linker non sa risolvere.

    Guai sugli include in genere sono dovuti alle classiche direttive di preprocessing
    codice:
     
    #ifndef QUALCOSA_H
    #define QUALCOSA_H
    ...
    #endif
    Ricorda sempre che una DLL è codice fatto e finito. Compilatore e linker non sanno coas c'è dentro: sanno solo le firme di funzioni (e/o classi esportate).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie shodan,
    mi sto approcciando adesso a capire cos è una dll e come funziona, ma probabilmente mi sono sbagliato su quello che ho detto.
    Quando parlo di dll intendo un progetto compilato come dll anzichè come lib o exe in visual c++(con visual studio).

    Io pero non carico la dll direttamente trqamite il modulo mi è sembrato di vedere in google , aggiungo semplicemente il .lib che viene creato insieme alla dll alle proprietà additional dependencies del linker e piazzo la dll nello stesso path dell exe .

    Poi includo i .h e richiamo i metodi della loro interfaccia.

    mi rendo conto che sono un po all'oscuro di quello che probabilmente sta dietro alle scene , perchè tutto è fatto da visual studio.

    l'errore te lo posto domani al al lavoro,adesso sono a casa e non ho sottomano il progetto.
    comunque parlava di redifinizione di classi.

    le direttive di preprocessore le ho controllate , sono a posto.

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da giuseppe500
    Quando parlo di dll intendo un progetto compilato come dll anzichè come lib o exe in visual c++(con visual studio).
    Beh, non ci sono molti modi di fare una DLL.
    Alla fine hai i vari file include, il .lib e la DLL.
    additional dependencies del linker
    ?
    Il .lib va aggiunto ai source file dell'exe come fosse un .cpp, non ci entra il linker qui.
    piazzo la dll nello stesso path dell exe
    Ok.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    allora shodan ,
    il problema è questo :
    sia il progetto exe che la dll utilizzano una classe C3DVector.

    Il progetto exe ha tra le directory incluse una directory include dove ci sono classi che hanno negli include dei riferimenti alla classe C3DVector della dll .
    Quando includo questa directory ho piu' riferimenti alla classe C3DVector.h quindi l'errore:

    c:\ifc\include\Ext\3DVector.h(5): error C2011: 'C3DVector' : 'class' type redefinition
    .
    come posso risolvere ?
    chiamando la classe con un nome diverso forse?
    poi pero' come faccio a passare dei dati di classe CVectorIfc(per esempio , rinominando) della dll al progetto .exe
    grazie.

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ma questa C3DVector è una classe che esporti dalla DLL?
    E' una classe che usi sia nella DLL sia nel EXE?
    Perché io non ho mai avuto problemi simili.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    è una classe che ho sia nella dll che nell exe , mi ero solo scordato di mettere dllexport nella firma della classe.
    scusa.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.