2011-03-20 69 views
0

使用JVMTI我正在開發一個代理來分析Java應用程序。因此編譯共享庫libagent.so。而且我用的是Qt框架:使用g ++共享庫中的未定義符號

現在就由這兩個源文件只包含: agent.cppagentserver.cpp

但是,從我的共享庫中的Java應用程序時libagent.so我得到的錯誤:未定義的符號:_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 -Wall -O2 -D_REENTRANT -W $(定義)

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

其中$(INCPATH)是-I /家/康拉德/ QTSDK-2010.05/QT/mkspecs/Linux的克++ - 64 -I ../ SRC -I /家/康拉德/ 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/in clude/linux -I。 -一世。 -I ../ src -I。

我已經花了一些時間研究這個問題,但沒有解決這個錯誤。


這是agentserver.cpp的頭部代碼:agentserver.h

回答

1

錯誤消息告訴您,在AgentServer的虛函數表的一些元素是不確定的。使用Q_OBJECT需要您在源代碼上運行moc - 並鏈接到qt庫。

+0

我只在頭文件中聲明瞭構造函數,並實現了它,如agentserver.cpp的源代碼中所示:6-9 – 2011-03-20 11:26:42

+0

@platzhirsch:發佈頭文件 – Erik 2011-03-20 11:27:29

+0

@Erik:好的,它的鏈接是附在我原來的文章 – 2011-03-20 11:30:27

相關問題