这是我的代码:
tools.h
#include <QtCore/QObject>
namespace Tinject
{
class ProbeCreator : public QObject
{
Q_OBJECT
public:
explicit ProbeCreator();
Q_INVOKABLE void createProbe();
//void update();
};
}tools.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然后我尝试注入这个库钩子。所以我使用的是LD_PRELOAD,我得到了以下错误:
hook.so:未定义符号:_ZN12ProbeCreatorC1Ev
我的main.cpp是:
#include "tools.cpp"
using namespace Tinject;
extern "C" Q_DECL_EXPORT
void qt_startup_hook()
{
new ProbeCreator();
}这是怎么回事?
太多代码,额外的测试:)
发布于 2018-01-07 18:56:21
您的tools.cpp似乎没有包含在源代码中,也没有编译。
发布于 2018-01-08 10:07:30
#include "tools.cpp"
这是错误的;您需要包含标题:
#include "tools.h" 此外,正如@StPiere所指出的,您需要将源文件tools.cpp和生成的moc_*.cpp文件包含到链接中。如何使用对g++的自定义调用来做到这一点--您将自己尝试一下;不过,我建议您使用qmake并设置一个项目文件,该文件还将处理moc和许多其他Qt特定细节。
https://stackoverflow.com/questions/48139955
复制相似问题