Неопределенный символ в общей библиотеке с g ++ - PullRequest
1 голос
/ 20 марта 2011

С JVMTI я разрабатываю агент для профилирования приложений Java.Поэтому совместно используемая библиотека libagent.so компилируется.Далее я использую фреймворк Qt:

На данный момент он состоит только из этих двух исходных файлов: agent.cpp и agentserver.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 -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 / qkstk-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/ включить / linux -I.-Я.-I ../ src -I.

Я потратил некоторое время на изучение этой проблемы, но никто не решил эту ошибку.


Это код заголовка agentserver.cpp: agentserver.h

1 Ответ

1 голос
/ 20 марта 2011

Сообщение об ошибке говорит о том, что некоторый элемент в vtable агента AgentServer не определен.Использование Q_OBJECT требует, чтобы вы запустили moc на вашем источнике и соединились с библиотеками qt.

...