带有g ++的共享库中的未定义符号

时间:2011-03-20 11:12:51

标签: c++ qt g++ jvmti moc

使用JVMTI我正在开发一个代理来分析Java应用程序。因此编译共享库libagent.so。我进一步使用Qt框架:

目前它只包含这两个源文件: agent.cppagentserver.cpp

但是,当使用我的共享库libagent.so启动Java应用程序时,我收到错误:未定义的符号:_ZTV11AgentServer(./libagent.so)

当我运行ldd时,我得到了相同的依赖性问题:

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)

我当前的编译命令是:

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

$(CXXFLAGS)是-m64 -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)

其中$(DEFINES)是-DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED

其中$(INCPATH)是-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.05 / qt / include / QtGui -I / home / konrad / qtsdk-2010.05 / qt / include -I / usr / lib / jvm / java-6-openjdk / include -I / usr / lib / jvm / java-6-openjdk / include / linux -I。 -一世。 -I ../src-I。

我花了一些时间研究这个问题,但没有一个解决了这个错误。


这是agentserver.cpp的标题代码:agentserver.h

1 个答案:

答案 0 :(得分:1)

错误消息告诉您AgentServer的vtable中的某些元素未定义。使用Q_OBJECT要求您在源代码上运行moc并链接到qt库。