Pregunta

Con JVMTI estoy desarrollando un agente para perfilar aplicaciones Java. Por lo tanto, una biblioteca compartida LibGagent. Además, uso el marco QT:

Por ahora consiste solo en estos dos archivos de origen:agente.cpp y agenteerver.cpp

Sin embargo, al comenzar una aplicación Java con mi biblioteca compartida Libgagent. Así que recibo el error: Símbolo indefinido: _ZTV11AgentServer (./libagent.so)

Cuando ejecuto LDD obtengo el mismo problema de dependencia:

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)

Mi comando de compilación actual es:

g++ $(CXXFLAGS) -fPIC -shared -o libagent.so $(INCPATH) ../src/agent.cpp ../src/agentserver.cpp

Donde $ (cxxflags) es -m64 -pipe -o2 -wall -w -d_reentrant $ (define)

donde $ (define) es -dqt_no_debug -dqt_gui_lib -dqt_network_lib -dqt_core_lib -dqt_shared

donde $ (Incpath) es -i/home/konrad/qtsdk -2010.05/qt/mkspecs/linux -g ++ -64 -i ../ src -i/home/konrad/qtsdk -2010.05/qt/include/qtcore -i -i -i -i /home/konrad/qtsdk-2010.05/qt/include/qtnetwork -i/home/konrad/qtsdk -2010.05/qt/include/qtgui -i/home/konrad/qtsdk -2010.05/qt/include -i/usr/liba /jvm/java-6-openjdk/include -i/usr/lib/jvm/java-6-openjdk/include/linux -i. -YO. -I ../ src -i.

He dedicado algo de tiempo a investigar estos problemas, pero ninguno resolvió este error.


Este es el código de encabezado de Agentserver.cpp: agenteerver.h

¿Fue útil?

Solución

El mensaje de error le dice que algún elemento en el VTable de Agentserver está indefinido. El uso de Q_OBJECT requiere que ejecute moc en su fuente y enlace a las bibliotecas QT.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top