Quando il make arriva a linkare uno dei programmi del progetto ottengo il
seguente:
make[2]: Entering directory
`/home/rosario/earthworm/earthworm-webdrum-0.1.10/module'
/bin/sh ../libtool --tag=CXX --mode=link g++ -g -O2 -pthread -o webdrum
main.o event.o writersync.o plotterclear.o configuration.o threadkeeper.o
thread.o imageinfo.o imagespec.o matchchannel.o ew_logger.o latencyconfig.o
latency.o webdrum.o ringreader.o filewriter.o
timer.o -learthworm_ov_util -lewovxx ../libraries/plotting/libplotting.la
-learthworm_mt -learthworm_unix -learthworm_ov_util -lewovxx -pthread
g++ -g -O2 -pthread -o .libs/webdrum main.o event.o writersync.o
plotterclear.o configuration.o threadkeeper.o thread.o imageinfo.o
imagespec.o matchchannel.o ew_logger.o latencyconfig.o latency.o webdrum.o
ringreader.o filewriter.o timer.o -pthread
../libraries/plotting/.libs/libplotting.so /usr/lib/libearthworm_mt.so
/usr/lib/libearthworm_unix.so /usr/lib/libearthworm_ov_util.so /usr/lib/libewovxx.so
webdrum.o: In function `WebDrum::heartbeat()':
/home/rosario/earthworm/earthworm-webdrum-0.1.10/module/webdrum.cpp:360:
undefined reference to `ewxx::Ring::putMessage(MSG_LOGO const*, long, char
const*)'
collect2: ld returned 1 exit status
Il metodo in questione e` contenuto nella libreria /usr/lib/libewovxx.so,
anch'essa figlia di un progetto autocompilato... Come prima cosa ho provato
(linkando a mano) a spostare l'ordine in cui appaiono le librerie sulla
linea di comando: questa cosa, a volte, in passato mi aveva aiutato, ma
stavolta niet... Ho allora provato a linkare non la versione dinamica della
libreria, ma la versione statica e, sorpresa, e` cambiato il simbolo non
risolto:
g++ -g -O2 -pthread -o .libs/webdrum main.o event.o writersync.o
plotterclear.o configuration.o threadkeeper.o thread.o imageinfo.o
imagespec.o matchchannel.o ew_logger.o latencyconfig.o latency.o webdrum.o
ringreader.o filewriter.o timer.o -pthread /usr/lib/libearthworm_ov_util.so
/usr/lib/libewovxx.a ../libraries/plotting/.libs/libplotting.so
/usr/lib/libearthworm_mt.so /usr/lib/libearthworm_unix.so
../libraries/plotting/.libs/libplotting.so: undefined reference to
`ewxx::PacketMean::~PacketMean()'
../libraries/plotting/.libs/libplotting.so: undefined reference to
`ewxx::PacketMean::PacketMean(ewxx::Packet const&)'
Da notare che sono sempre simboli contenuti nella stessa libreria
libewovxx... Allora ho messo due volte la libreria, all'inizio ed alla
fine:
g++ -g -O2 -pthread -o .libs/webdrum main.o event.o writersync.o
plotterclear.o configuration.o threadkeeper.o thread.o imageinfo.o
imagespec.o matchchannel.o ew_logger.o latencyconfig.o latency.o webdrum.o
ringreader.o filewriter.o timer.o -pthread /usr/lib/libearthworm_ov_util.so
/usr/lib/libewovxx.a ../libraries/plotting/.libs/libplotting.so
/usr/lib/libearthworm_mt.so /usr/lib/libearthworm_unix.so /usr/lib/libewovxx.a
Ed ha funzionato senza problemi !!!! La cosa funziona anche se sostituisco
la seconda istanza della libreria statica con quella dinamica, ma non se la
uso all'inizio !!! Tra l'altro in questo modo il metodo
ewxx::Ring::putMessage viene inserito staticamente nell'eseguibile (nm
dixit)...
*sigh* non so piu` che pesci pigliare, ho provato a fare tutte le rotazioni
possibili nell'elenco di librerie nel Makefile.am ma nisba !!!
Chi mi sa aiutare ???
Ah, sto usando debian etch, e g++ e` il seguente:
g++ -v
Using built-in specs.
Target: i486-linux-gnu
Configured with:
../src/configure -v
--enable-languages=c,c++,fortran,objc,obj-c++,treelang
--prefix=/usr --enable-shared --with-system-zlib
--libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --enable-nls --program-suffix=-4.1
--enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug
--enable-mpfr --with-tune=i686 --enable-checking=release i486-linux-gnu
Thread model: posix gcc version 4.1.2 20061115 (prerelease) (Debian
4.1.1-21)
--
|
\|/ ____ \|/ \ ||_| | Tutti mentono; ma non importa,
"@'/ ,. \`@" \|| | | perche` nessuno sta a sentire.
/_| \__/ |_\ Vax Headroom |
\__U_/ | Legge di Lieberman
[cut]
Alla fine ho risolto in un modo tanto banale quanto sconcertante:
modificando l'ordine dei sorgenti nel Makefile.am...
Ma 'sto baco del linker di gcc non era stato risolto eoni fa ???
--
|
\|/ ____ \|/ \ ||_| | Se un triangolo ha quattro lati,
"@'/ ,. \`@" \|| | | uno non e` suo
/_| \__/ |_\ Vax Headroom |
\__U_/ | da it.discussioni.folli