Simbolo indefinito nella libreria condivisa con G ++
Domanda
Con JVMTI sto sviluppando un agente per profilare le applicazioni Java. Pertanto viene compilata una libreria condivisa libagent. Inoltre uso il framework QT:
Per ora consiste solo da questi due file di origine:agent.cpp e Agentserver.cpp
Tuttavia, quando si avvia un'applicazione Java con la mia libreria condivisa libagent. Quindi ricevo l'errore: Simbolo indefinito: _ZTV11AGENTSERVER (./Libagent.so)
Quando eseguo LDD ho lo stesso problema di dipendenza:
ldd -d libagent.so
linux-vdso.so.1 => (0x00007fffeb333000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f8b6731b000)
libm.so.6 => /lib/libm.so.6 (0x00007f8b67098000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f8b66e81000)
libc.so.6 => /lib/libc.so.6 (0x00007f8b66afe000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8b67844000)
undefined symbol: _ZTV11AgentServer (./libagent.so)
Il mio attuale comando di compilazione è:
g++ $(CXXFLAGS) -fPIC -shared -o libagent.so $(INCPATH) ../src/agent.cpp ../src/agentserver.cpp
Dove $ (cxxflags) è -m64 -pipe -o2 -wall -w -d_reentrant $ (defines)
dove $ (defines) è -dqt_no_debug -dqt_gui_lib -dqt_network_lib -dqt_core_lib -dqt_shared
dove $ (incpace) è -i/home/konrad/qtsdk -2010.05/qt/mkspecs/linux -g ++ -64 -i ../ src -i/home/konrad/qtsdk -2010.05/qt/include/Qtcore -i /home/konrad/qtsdk-2010.05/qt/include/qtnetwork -i/home/konrad/qtsdk -2010 /jvm/java-6-openjdk/include -i/usr/lib/jvm/java-6-openjdk/include/linux -i. -IO. -I ../ src -i.
Ho dedicato del tempo alla ricerca di questi problemi, ma nessuno ha risolto questo errore.
Questo è il codice di intestazione di Agentserver.CPP: Agentserver.H
Soluzione
Il messaggio di errore ti sta dicendo che un elemento nella vtable di Agentserver non è definito. L'utilizzo di Q_OBJECT
Richiede di correre moc
sulla tua fonte - e collega alle librerie QT.