View Full Version : [C++] Errore mai visto in compilazione, mi sapete aiutare?
Abadir_82
07-12-2007, 09:13
Ciao.
In azienda mi hanno chiesto un software per calcolare l'esatta elevazione ed azimuth del sole data una data ed una posizione sul globo terrestre. Ho trovato un programma free gia' fatto, pero' quando lo compilo mi da un sacco di errori nella cartella dei file temporanei e non capisco il perche'. Da cosa potrebbe dipendere?
Gli errori che ottengo sono i seguenti, piu' sotto allego anche i file. Vanno tutti nella stessa cartella e poi si lancia il makefile.
Chi mi sa dare una mano? Anche solo capire da dove saltano fuori questi errori...
Grazie mille.
----------
C:\DOCUME~1\matteo\LOCALS~1\Temp/ccGUbaaa.o(.text+0xed):main.cpp: undefined reference to `_imp__geoInitLocation@36'
C:\DOCUME~1\matteo\LOCALS~1\Temp/ccGUbaaa.o(.text+0x177):main.cpp: undefined reference to `_imp__geoSunAzElNow@12'
C:\DOCUME~1\matteo\LOCALS~1\Temp/ccGUbaaa.o(.text+0x20c):main.cpp: undefined reference to `_imp__geoSunAzEltm@16'
C:\DOCUME~1\matteo\LOCALS~1\Temp/ccWMcaaa.o(.text+0x52):geoPoint.c: undefined reference to `_imp__geoGetEllipsoid@24'
C:\DOCUME~1\matteo\LOCALS~1\Temp/ccWMcaaa.o(.text+0x25e):geoPoint.c: undefined reference to `_imp__geoGetEllipsoid@24'
.
.
.
.
.
--------
non ho guardato i files allegati, ma si tratta semplicemente del fatto che il linker non riesce a trovare le funzioni geoInitLocation, geoSunAzElNow, ecc.
non so com'è organizzato il progetto ma credo che tu debba agire sul Makefile: devi linkare la libreria che esporta quelle funzioni.
Abadir_82
07-12-2007, 10:43
non ho guardato i files allegati, ma si tratta semplicemente del fatto che il linker non riesce a trovare le funzioni geoInitLocation, geoSunAzElNow, ecc.
non so com'è organizzato il progetto ma credo che tu debba agire sul Makefile: devi linkare la libreria che esporta quelle funzioni.
Il fatto e' che sul sito dicono semplicemente di compilare, senza linkare librerie. Una libreria che esporta alcune funzioni come si linka generalmente?
il gcc ha l'opzione -l, il MinGW non ricordo (c'era tutta una storia di un casino tra diversi formati Microsoft e GNU: Microsoft usa i .lib, GNU non l'ho mai capito troppo bene).
Abadir_82
07-12-2007, 11:14
il gcc ha l'opzione -l, il MinGW non ricordo (c'era tutta una storia di un casino tra diversi formati Microsoft e GNU: Microsoft usa i .lib, GNU non l'ho mai capito troppo bene).
Ho controllato, e le funzioni sono definite nel file header (correttamente linkato nel main) all´interno di una extern "C".
Come faccio a includere la libreria? Devo crearmela a partire da quel file che contiene le definizioni delle funzioni e poi la linko con -l in fase di compilazione? Se la libreria si chiama Pippo.a, per linkarla mi basta aggiungere -lPippo a fine della riga di compilazione?
Ho controllato, e le funzioni sono definite nel file header (correttamente linkato nel main) all´interno di una extern "C".
Come faccio a includere la libreria? Devo crearmela a partire da quel file che contiene le definizioni delle funzioni e poi la linko con -l in fase di compilazione? Se la libreria si chiama Pippo.a, per linkarla mi basta aggiungere -lPippo a fine della riga di compilazione? non so se ciò che scrivi è la soluzione al tuo specifico problema, comunque prova, non saprei. anziché stare a sentire a me ti conviene attendere qualcuno meno pigro che abbia voglia di aprire i files in allegato :D
Abadir_82
07-12-2007, 11:23
non so se ciò che scrivi è la soluzione al tuo specifico problema, comunque prova, non saprei. anziché stare a sentire a me ti conviene attendere qualcuno meno pigro che abbia voglia di aprire i files in allegato :D
Ho appena provato, non funziona, mi da sempre gli stessi errori.
Dai, fai uno sforzo e dammi una mano... :D
variabilepippo
07-12-2007, 11:26
Il fatto e' che sul sito dicono semplicemente di compilare, senza linkare librerie
A me pare che dicano esattamente il contrario:
Example compilation with GNU C++
with novas already in a library:
gcc geoTest.c geoAstro.c geoEllips.c geoPoint.c geoMag.c novas\novas.a
with Novas NOT in a library:
gcc geoTest.c geoAstro.c geoEllips.c geoPoint.c geoMag.c \
novas\novas.c novas\novascon.c novas\readeph0.c novas\solsys3.c
Abadir_82
07-12-2007, 11:29
A me pare che dicano esattamente il contrario:
Example compilation with GNU C++
with novas already in a library:
gcc geoTest.c geoAstro.c geoEllips.c geoPoint.c geoMag.c novas\novas.a
with Novas NOT in a library:
gcc geoTest.c geoAstro.c geoEllips.c geoPoint.c geoMag.c \
novas\novas.c novas\novascon.c novas\readeph0.c novas\solsys3.c
Io mio makefile e´ uguale a quello, infatti ho aggiunto fin dall´inizio i file della novas. Il problema nasce con le funzioni di geoAstro, geoEllips, geoPoint e geoMag. Come librerie intendevo librerie del software geo :D.
Abadir_82
07-12-2007, 13:04
Risolto...
Nelle definizioni di quelle funzioni veniva usato un DLL_CALLCONV (penso per creare le DLL in windows), ma in dos non funzionava.
tolti quelli ora compila.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.