【发布时间】:2018-01-07 17:52:12
【问题描述】:
这是我的代码:
工具.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
然后我尝试注入这个库钩子。所以我使用LD_PRELOAD,我得到了以下错误:
hook.so:未定义符号:_ZN12ProbeCreatorC1Ev
我的 main.cpp 是:
#include "tools.cpp"
using namespace Tinject;
extern "C" Q_DECL_EXPORT
void qt_startup_hook()
{
new ProbeCreator();
}
这有什么问题?
代码太多,额外测试:)
【问题讨论】:
-
这是一个链接器错误。看起来缺少库或库版本错误。
-
我知道,但我如何检查哪里出了问题? :)
-
我会首先检查 ProbeCreator 的定义位置,是否链接了包含其定义的库,如果是,请尝试使用相同的编译器设置重新编译这些库。
-
我将 main.cpp 从评论部分转移到主要问题。
标签: c++ linux qt ld-preload