首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt和Q_OBJECT

Qt和Q_OBJECT
EN

Stack Overflow用户
提问于 2018-01-07 17:52:12
回答 2查看 299关注 0票数 0

这是我的代码:

tools.h

代码语言:javascript
复制
#include <QtCore/QObject>    
namespace Tinject
{
    class ProbeCreator : public QObject
    {
        Q_OBJECT

        public:
            explicit ProbeCreator();
            Q_INVOKABLE void createProbe();
            //void update();
    };
}

tools.cpp

代码语言:javascript
复制
#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"

在每一个

代码语言:javascript
复制
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) 

我跑

代码语言:javascript
复制
moc tools.h -o tools.cpp

然后我尝试注入这个库钩子。所以我使用的是LD_PRELOAD,我得到了以下错误:

hook.so:未定义符号:_ZN12ProbeCreatorC1Ev

我的main.cpp是:

代码语言:javascript
复制
#include "tools.cpp" 
using namespace Tinject; 
extern "C" Q_DECL_EXPORT 
void qt_startup_hook() 
{ 
  new ProbeCreator(); 
}

这是怎么回事?

太多代码,额外的测试:)

EN

回答 2

Stack Overflow用户

发布于 2018-01-07 18:56:21

您的tools.cpp似乎没有包含在源代码中,也没有编译。

票数 1
EN

Stack Overflow用户

发布于 2018-01-08 10:07:30

#include "tools.cpp"

这是错误的;您需要包含标题:

代码语言:javascript
复制
#include "tools.h" 

此外,正如@StPiere所指出的,您需要将源文件tools.cpp和生成的moc_*.cpp文件包含到链接中。如何使用对g++的自定义调用来做到这一点--您将自己尝试一下;不过,我建议您使用qmake并设置一个项目文件,该文件还将处理moc和许多其他Qt特定细节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48139955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档