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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top