这是我的代码:
工具.h
#include <QtCore/QObject>
namespace Tinject
{
class ProbeCreator : public QObject
{
Q_OBJECT
public:
explicit ProbeCreator();
Q_INVOKABLE void createProbe();
//void update();
};
}
工具.cpp
#include <stdio.h>
#include "tools.h"
#include <QtCore/QCoreApplication>
#include <QtCore/QMetaObject>
using namespace std;
using namespace Tinject;
ProbeCreator::ProbeCreator() {
moveToThread(QCoreApplication::instance()->thread());
QMetaObject::invokeMethod(this, "createProbe", Qt::QueuedConnection);
}
void ProbeCreator::createProbe()
{
printf("CREATE PROBE");
}
#include "tools.moc"
在每个之前
g++ (g++ -fPIC -o hook.so -shared -I/path/Qt5.4.2/5.4/gcc_64/include -L/path/Qt5.4.2/5.4/gcc_64/lib -lQt5Core main.cpp)
我在运行
moc tools.h -o tools.cpp
然后我尝试注入(inject)这个库钩子(Hook)。所以我正在使用 LD_PRELOAD
并且出现以下错误:
hook.so: undefined symbol: _ZN12ProbeCreatorC1Ev
我的 main.cpp 是:
#include "tools.cpp"
using namespace Tinject;
extern "C" Q_DECL_EXPORT
void qt_startup_hook()
{
new ProbeCreator();
}
这有什么问题吗?
太多代码,额外测试:)
最佳答案
看起来您的 tools.cpp 未包含在源代码中或未编译。
关于c++ - Qt 和 Q_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48139955/