c++ - Qt 和 Q_OBJECT

标签 c++ linux qt ld-preload

这是我的代码:

工具.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/

相关文章:

qt - 从 QTextEdit 中删除行/ block

c++ - 如何使用sqlite设置星期几

c++ - 快速路径数据包处理的配置更新

c++ - 限定 C++ 宏的范围?

c++ - QTableWidget 获取垂直表头标签

linux - 使用 apt 或其他命令的好处?

linux - 差异连续行 unix

c++ - 计算鼠标点击次数 C

c++ - C++ 编译器如何在 C++0x 中实现线程本地存储?

ruby-on-rails - rails : How to pass data to Bash Script