簡體   English   中英

使用G ++的共享庫中的未定義符號

[英]Undefined symbol in shared library with g++

使用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

錯誤消息告訴您AgentServer的vtable中的某些元素未定義。 使用Q_OBJECT要求您在源代碼上運行moc並鏈接到qt庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM