这是我的代码:
的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();
}
这有什么问题?
代码太多,额外测试:)
答案 0 :(得分:1)
看起来您的tools.cpp未包含在源代码中或未编译。
答案 1 :(得分:1)
#include "tools.h"
这是错的;你需要包括标题:
tools.cpp
此外,正如@StPiere指出的那样,您需要将源文件moc_*.cpp
和生成的g++
文件包含在链接中。如何通过自定义调用moc
来完成此操作,您将尝试自己;但我建议使用qmake
并设置一个项目文件,该文件也会处理graphEditorInputMode.orthogonalEdgeEditingContext = new yfiles.input.OrthogonalEdgeEditingContext();
和许多其他Qt特定细节。