|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2010
Messaggi: 1
|
[c++] ld: undefined reference (non il solito banale errore)
salve a tutti!
ho un problema del quale non riesco a venire a capo premetto che mi trovo su unix (freebsd). in un programma ho un binario che, tra le altre, dev'essere linkato a due librerie, A e B. la libreria B, di suo, e' gia' linkata alla libreria A, senza problemi insomma, quando arrivo a linkare il binario, tutto fallisce riportando undefined references a simboli della libreria A. ho controllato tutti gli -rpath del caso, i percorsi sembrano tutti giusti... la mia sensazione e' che ci sia qualche problema nella compilazione/linkaggio della libreria A, per cui la B "crede" di esservisi linkata, ma poi quando deve effettivamente recuperarne i simboli non li trova. mi sono gia' trovato una volta in una situazione simile, ed il problema era proprio la libreria A, che era obsoleta. in questo caso pero' sono tutte parti dello stesso progetto... aggiungo un dettaglio non trascurabile: compilando sulle qt 4.6 (si linkano anche ed esse) tutto funziona, il problema si presenta con la beta delle qt 4.7. ho cercato qualche differenza nelle macro: l'unica che mi sembra poter influire in qualche modo e' quella che setta la __visibility__, ma e' uguale in entrambe le versioni... quindi: non so piu' dove sbattere la testa. non vi chiedo di risolvermi il problema, ma almeno di suggerirmi qualche strada da prendere, perche' su internet non trovo ne' spiegazioni dettagliate su come funziona un linker (ld, in questo caso), ne' risposte "alternative" (quelle classiche le conosco a memoria) al problema delle undefined references e ora un piccolo estratto dal log il linkaggio della libreria A: Codice:
Linking CXX shared library libsoprano.so cd /work/a/ports/textproc/soprano/work/soprano-2.4.63/soprano && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/soprano.dir/link.txt --verbose=1 /opt/c++ -fPIC -O2 -pipe -fno-strict-aliasing -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-check-new -fno-common -fvisibility=hidden -fvisibility-inlines-hidden -shared -Wl,-soname,libsoprano.so.4 -o libsoprano.so.4.3.0 CMakeFiles/soprano.dir/queryresultiterator.cpp.o CMakeFiles/soprano.dir/queryresultiteratorbackend.cpp.o CMakeFiles/soprano.dir/node.cpp.o CMakeFiles/soprano.dir/statement.cpp.o CMakeFiles/soprano.dir/statementiterator.cpp.o CMakeFiles/soprano.dir/nodeiterator.cpp.o CMakeFiles/soprano.dir/model.cpp.o CMakeFiles/soprano.dir/parser.cpp.o CMakeFiles/soprano.dir/serializer.cpp.o CMakeFiles/soprano.dir/pluginmanager.cpp.o CMakeFiles/soprano.dir/pluginstub.cpp.o CMakeFiles/soprano.dir/plugin.cpp.o CMakeFiles/soprano.dir/qhashqurlcompat.cpp.o CMakeFiles/soprano.dir/backend.cpp.o CMakeFiles/soprano.dir/global.cpp.o CMakeFiles/soprano.dir/error.cpp.o CMakeFiles/soprano.dir/literalvalue.cpp.o CMakeFiles/soprano.dir/languagetag.cpp.o CMakeFiles/soprano.dir/locator.cpp.o CMakeFiles/soprano.dir/datetime.cpp.o CMakeFiles/soprano.dir/version.cpp.o CMakeFiles/soprano.dir/filtermodel.cpp.o CMakeFiles/soprano.dir/storagemodel.cpp.o CMakeFiles/soprano.dir/rdfschemamodel.cpp.o CMakeFiles/soprano.dir/bindingset.cpp.o CMakeFiles/soprano.dir/sopranotypes.cpp.o CMakeFiles/soprano.dir/graph.cpp.o CMakeFiles/soprano.dir/vocabulary/rdf.cpp.o CMakeFiles/soprano.dir/vocabulary/rdfs.cpp.o CMakeFiles/soprano.dir/vocabulary/xsd.cpp.o CMakeFiles/soprano.dir/vocabulary/nrl.cpp.o CMakeFiles/soprano.dir/vocabulary/nao.cpp.o CMakeFiles/soprano.dir/vocabulary/xesam.cpp.o CMakeFiles/soprano.dir/vocabulary/owl.cpp.o CMakeFiles/soprano.dir/query/query.cpp.o CMakeFiles/soprano.dir/query/queryparser.cpp.o CMakeFiles/soprano.dir/query/queryserializer.cpp.o CMakeFiles/soprano.dir/inference/nodepattern.cpp.o CMakeFiles/soprano.dir/inference/statementpattern.cpp.o CMakeFiles/soprano.dir/inference/inferencerule.cpp.o CMakeFiles/soprano.dir/inference/inferenceruleset.cpp.o CMakeFiles/soprano.dir/inference/sil.cpp.o CMakeFiles/soprano.dir/inference/inferencemodel.cpp.o CMakeFiles/soprano.dir/inference/inferenceruleparser.cpp.o CMakeFiles/soprano.dir/nrlmodel.cpp.o CMakeFiles/soprano.dir/inifile.cpp.o CMakeFiles/soprano.dir/desktopfile.cpp.o CMakeFiles/soprano.dir/sopranopluginfile.cpp.o CMakeFiles/soprano.dir/sopranodirs.cpp.o CMakeFiles/soprano.dir/util/extreadwritelock.cpp.o CMakeFiles/soprano.dir/util/mutexmodel.cpp.o CMakeFiles/soprano.dir/util/mutexstatementiteratorbackend.cpp.o CMakeFiles/soprano.dir/util/mutexnodeiteratorbackend.cpp.o CMakeFiles/soprano.dir/util/mutexqueryresultiteratorbackend.cpp.o CMakeFiles/soprano.dir/util/simplestatementiterator.cpp.o CMakeFiles/soprano.dir/util/simplenodeiterator.cpp.o CMakeFiles/soprano.dir/util/dummymodel.cpp.o CMakeFiles/soprano.dir/util/signalcachemodel.cpp.o CMakeFiles/soprano.dir/util/readonlymodel.cpp.o CMakeFiles/soprano.dir/util/asyncmodel.cpp.o CMakeFiles/soprano.dir/util/asyncresult.cpp.o CMakeFiles/soprano.dir/util/asynccommand.cpp.o CMakeFiles/soprano.dir/util/asynciteratorbackend.cpp.o CMakeFiles/soprano.dir/util/asyncquery.cpp.o /usr/local/lib/qt4/libQtCore.so -pthread -Wl,-rpath,/usr/local/lib/qt4::::::::::::::: Codice:
Linking CXX shared library libsopranoserver.so cd /work/a/ports/textproc/soprano/work/soprano-2.4.63/server && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/sopranoserver.dir/link.txt --verbose=1 /opt/c++ -fPIC -O2 -pipe -fno-strict-aliasing -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-check-new -fno-common -fvisibility=hidden -fvisibility-inlines-hidden -shared -Wl,-soname,libsopranoserver.so.1 -o libsopranoserver.so.1.2.0 CMakeFiles/sopranoserver.dir/servercore.cpp.o CMakeFiles/sopranoserver.dir/serverconnection.cpp.o CMakeFiles/sopranoserver.dir/modelpool.cpp.o CMakeFiles/sopranoserver.dir/randomgenerator.cpp.o CMakeFiles/sopranoserver.dir/datastream.cpp.o CMakeFiles/sopranoserver.dir/localserver.cpp.o CMakeFiles/sopranoserver.dir/tcpserver.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusutil.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusmodeladaptor.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusexportiterator.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusexportmodel.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusstatementiteratoradaptor.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusnodeiteratoradaptor.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusqueryresultiteratoradaptor.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusserveradaptor.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbuscontroller.cpp.o CMakeFiles/sopranoserver.dir/dbus/dbusoperators.cpp.o /usr/local/lib/qt4/libQtCore.so -pthread /usr/local/lib/qt4/libQtNetwork.so ../soprano/libsoprano.so.4.3.0 /usr/local/lib/qt4/libQtDBus.so /usr/local/lib/qt4/libQtCore.so -pthread -Wl,-rpath,/usr/local/lib/qt4:/work/a/ports/textproc/soprano/work/soprano-2.4.63/soprano: Codice:
Linking CXX executable sopranod cd /work/a/ports/textproc/soprano/work/soprano-2.4.63/server && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/sopranod.dir/link.txt --verbose=1 /opt/c++ -O2 -pipe -fno-strict-aliasing -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-check-new -fno-common -fvisibility=hidden -fvisibility-inlines-hidden CMakeFiles/sopranod.dir/sopranod.cpp.o CMakeFiles/sopranod.dir/sopranodcore.cpp.o CMakeFiles/sopranod.dir/lockfile.cpp.o -o sopranod ../soprano/libsoprano.so.4.3.0 libsopranoserver.so.1.2.0 ../index/libsopranoindex.so.1.1.0 /usr/local/lib/qt4/libQtNetwork.so /usr/local/lib/qt4/libQtDBus.so ../soprano/libsoprano.so.4.3.0 /usr/local/lib/qt4/libQtCore.so -pthread /usr/local/lib/libclucene.so -Wl,-rpath,/work/a/ports/textproc/soprano/work/soprano-2.4.63/soprano:/work/a/ports/textproc/soprano/work/soprano-2.4.63/server:/work/a/ports/textproc/soprano/work/soprano-2.4.63/index:/usr/local/lib/qt4:/usr/local/lib: CMakeFiles/sopranod.dir/sopranod.cpp.o(.text+0x5b): In function `usage()': : undefined reference to `Soprano::versionString()' CMakeFiles/sopranod.dir/sopranodcore.cpp.o(.gnu.linkonce.r._ZTV12SopranodCore+0x58): undefined reference to `Soprano::Error::ErrorCache::lastError() const' libsopranoserver.so.1.2.0: undefined reference to `Soprano::Error::ErrorCache::ErrorCache()' grazie a chiunque volesse interessarsi al mio problema! Ultima modifica di alfons : 27-05-2010 alle 18:51. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:28.



















