Newsgroup: it.comp.os.linux.sys
Titolo: errore lg++

salve a tutti,
mi rivolgo a questo news group per un problema che ho trovato nella
compilazione ed esecuzione di un programma
passo 1)
compilando il programma con un makefile leggermente diverso
dall'originale (dico leggermente diverso perché il programma originale è
sviluppato per SGI-Irix, ma è stato testato che la versione precedente
alla mia funziona anche su linux) ottengo il seguente file degli errori:
gs.cc: In method `Genetic_Algorithm::Genetic_Algorithm (EvalMode,
Selection_Mode, Xover_Mode, Worst_Mode, int, float, float, int,
unsigned int)':
gs.cc:158: warning: assignment to `int' from `double'
gs.cc:158: warning: argument to `int' from `double'
gs.cc:158: warning: assignment to `int' from `double'
gs.cc:158: warning: argument to `int' from `double'
ranlib.cc: In function `FourByteLong ignbin (long int, float)':
ranlib.cc:766: warning: assignment to `FourByteLong' from `float'
ranlib.cc:766: warning: argument to `long int' from `float'
ranlib.cc:791: warning: assignment to `FourByteLong' from `float'
ranlib.cc:791: warning: argument to `long int' from `float'
ranlib.cc:801: warning: assignment to `FourByteLong' from `float'
ranlib.cc:801: warning: argument to `long int' from `float'
ranlib.cc:808: warning: assignment to `FourByteLong' from `double'
ranlib.cc:808: warning: argument to `long int' from `double'
ranlib.cc:816: warning: assignment to `FourByteLong' from `double'
ranlib.cc:816: warning: argument to `long int' from `double'
support.cc: In method `Molecule *Individual::getMol ()':
support.cc:626: warning: address of local variable `returnedMol'
returned
/usr/bin/ld: cannot find -lg++
collect2: ld returned 1 exit status
make: *** [autodock3] Error 1
passo 2)
A questo punto elimino dal madefile il flag -lg++ e riesco a compilare
il programma più o meno bene (dico più o meno bene in quanto ottengo
ancora i vari warning presenti nel file presedentemente riportato).
Mi si genera l'eseguibile, e fin qui tutto bene, lancio l'eseguibile e
noto che il programma inizia a girare (è un programma di chimica
computazionale) fino a quando si interrompe qualche minuto dopo, perché
non riesce a trovare, aprire, leggere o non so cos'altro, un determinato
file.
ora, premasso che i problemi non sono relativi al file in questione, ai
suoi vari permessi ecc. quale protrebbe essere il problema secondo voi?
dovrei cambiare qualche riga di codice? (sarebbe un gigantsco problema
perché il programma ovviamente non l'ho scritto io)
Sapreste consigliarmi in qualche modo?
e ancora
perché non prende l'opzione -lg++, la quale è stata specificata dal
produttore del software come specifica per il gnu cc?
grazie per l'attnzione e scusate per la lunghezza
ciao

 file.
Dovresti mandarci il messaggio di errore.
-- 
Stefano - Hodie sexto Idus Martias MMI est

 Dovresti mandarci il messaggio di errore.
non viene prodotto alcun messaggio di errore, a pare al classico
segmentatio fault
core dumped
ciao.

 core dumped
Questo e' compatible (tra altre mille cose) con quell'warning che
avevo giudicato serio, 'returning pointer to temporary object'. Prova
a compilare cosi':
$ CFLAGS=-g make
che include i simboli di debug nel programma. Poi quando succede il
fattaccio, fai:
$ gdb <nome programma> core
gdb e' il debugger, che DEVI saper usare per programmare in C. Una
volta che e' partito, fai 'bt' per vedere dentro quale funzione il
programma muore. Controlla se e' la stessa che da' il warning di cui
sopra. In ogni caso, facci sapere l'output di 'bt' che potrebbe essere
d'aiuto.
Bada che se e' un errore di programmazione e non qualche differenza di
sistema operativo non potremmo aiutarti molto...
-- 
Stefano - Hodie quinto Idus Martias MMI est


ecco l'output di gdb
 gdb autodock3 core
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
Core was generated by `./autodock3 -p AIII-S-AP4_cari-2_gaussian.dpf'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libm.so.6...done.
Loaded symbols for /lib/libm.so.6
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0  0x805963e in readPDBQ ()
(gdb) bt
#0  0x805963e in readPDBQ ()
#1  0x804ae5a in main ()
#2  0x4005bb65 in __libc_start_main (main=0x8049eac <main>, argc=3,
ubp_av=0xbffffac4, init=0x80499cc <_init>,
    fini=0x807ae2c <_fini>, rtld_fini=0x4000df24 <_dl_fini>,
stack_end=0xbffffabc) at ../sysdeps/generic/libc-start.c:111
(gdb)
grazie tante per l'aiuto che mi state dando
ciao
Mirco

 (gdb)
Questo vuol dire che l'errore e' nella funzione readPDBQ, che e'
chiamata direttamente dalla funzione main, pero' non ci dice
nient'altro. Non penso che si possa aggiungere molto, purtroppo,
perche' sembra proprio un problema di programmazione.
Temo che devi imparare un po' come funziona gdb (non e' tanto
difficile) e cercare di capire quando il programma scrive fuori della
memoria riservatagli. Se la frase precedente e' arabo per
te, ti ci vorra' un po' di tempo o un amico che conosce il C++.
Sorry,
-- 
Stefano - Hodie quarto Idus Martias MMI est

Stefano Ghirlanda wrote:

ormai è succeso l'inevitabile!!! c'è un errore sul codice
infatti il file di core si genera proprio quando il programma cerca il
aprire un file in formato pdbq
(da cui il nome readpdbq)
grazie per tutto l'aiuto sei stato utilissimo, cosi' ora ho imparato
cosa fa un debugger cosa si può capire da lui ed anche che mi tocca
studiare un po di c.

 (da cui il nome readpdbq)
Cercando di capire che cos'e' sto formato pdbq, ho trovato la home
page del programma. Se non la conossci e':
http://www.scripps.edu/pub/olson-web/doc/autodock/
Sembra che per uso non-commerciale sia gratis anche se un po' lungo da
avere: occorre mandare un fax firmato in cui si impegna a non fare un
sacco di cose. Tra parentesi chi ti ha ceduto il programma ha molto
probabilmente infranto la licenza.



il sito lo conosco,
ma non so da dove č stata presa la copia del programma che possiedo, visto
che io l'ho trovata nel mio laboratorio.
Comunque la versione che io possiedo su SGI funziona perfettamente (ma ho
installato quella precompilata) quindi ho pensato che doveva funzionare
anche per linux, dato che i produttori loaffermano, invece pare che ci sia
questo errore nel codice
ora che so piů o meno cosa succede gli scriverň una e-mail
(ho notato che esiste la versione 3.0.5 (io avevo la 3.0.1))
ciao
Mirco

 che io l'ho trovata nel mio laboratorio.
Allora probabilmente siete a posto, susa per la subdola
insinuazione... 
-- 
Stefano - Hodie tertio Idus Martias MMI est

 insinuazione...
di niente.
esatto! per questo programma siamo a posto, ma.......