Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C\C++] multiple definition causa variabili esterne

    Ciao a tutti,

    sto provando ad integrare il codice C scritto da diverse persone in una dll da richiamare con Java tramite JNI.
    Sto utilizzando NetBeans con CygWin e Gcc.

    Ho una serie di errori di questo tipo
    codice:
    build/Debug/Cygwin-Windows/BPLEARN.o: In function `_Z11genera_pesiv':
    /cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPLEARN.cpp:145: multiple definition of `_Input'
    build/Debug/Cygwin-Windows/BPCLASS.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCLASS.cpp:249: first defined here
    build/Debug/Cygwin-Windows/BPLEARN.o: In function `_Z13apprendimentoiiiP2fvi':
    /cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPLEARN.cpp:798: multiple definition of `_IH'
    build/Debug/Cygwin-Windows/BPCLASS.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCLASS.cpp:108: first defined here
    build/Debug/Cygwin-Windows/BPLEARN.o: In function `_Z13apprendimentoiiiP2fvi':
    /cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPLEARN.cpp:798: multiple definition of `_HO'
    build/Debug/Cygwin-Windows/BPCLASS.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCLASS.cpp:249: first defined here
    
    /cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BP_LIBWB.cpp:37: multiple definition of `print_error(int, char*)'
    build/Debug/Cygwin-Windows/Mischia.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/Mischia.cpp:39: first defined here
    build/Debug/Cygwin-Windows/BP_LIBWB.o: In function `_Z11carica_pesiPc':
    /cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BP_LIBWB.cpp:64: multiple definition of `carica_pesi(char*)'
    build/Debug/Cygwin-Windows/BPCL_LIB.o:/cygdrive/c/Users/Utente/Documents/OcrB_ven/OcrB/BPCL_LIB.cpp:62: first defined here
    Per quanto riguarda gli errori sulle variabili HO, IH mi sono accorto che BPCLASS.cpp e BPLEARN.cpp definiscono le stesse variabili e in BP_LIBWB viene fatto dichiarando extern. Pensavo di eliminare la dicitura "extern" ma non posso perchè ad esempio la dichiarazione di IH è extern double IH[][MAX_HIDDEN];
    Se tolgo extern mi da errore perché la prima dimensione non è definita.
    Come posso fare???

    Poi ci sono gli errori sulla definizione multipla di funzione tra le classi BPCL_LIB.cpp BP_LIBWB.cpp e Mischia.cpp. I prototipi delle funzioni che "collidono" sono definiti rispettivamente in BPCL_LIB.h BP_LIBWB.h e nel prepocessore di Mischia.cpp e i file header non si richiamano a vicenda, ne Mischia.cpp ha gli include dei due header.
    Suggerimenti?

    Grazie a tutti

  2. #2
    aggiungo una cosa:

    ho risolto il problema sulle funzioni cancellando i doppioni.. ora resta quello sulle variabili.
    La cosa sta cosi:
    1)BPCL_LIB.cpp : contiene la definizione delle variabili di tipo extern
    2)BPCLASS.cpp e BPLEARN.cpp inizializzano entrambe le variabili extern

    Da qui l'errore..
    Come posso fare?
    Avevo probato con un namespace: nessun errore ma output errato.
    In realtà BPCLASS e BPLEARN.cpp non vengono mai usate insieme... o una o l'altra

  3. #3
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Puoi provare a creare un header .h con la definizione delle variabili ed includerlo in entrambi i file.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

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.