[英]Qt and Q_OBJECT
這是我的代碼:
工具
#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();
}
這有什么問題?
代碼太多,需要額外的測試:)
看起來您的tools.cpp沒有包含在源代碼中或未編譯。
#include "tools.cpp"
這是錯誤的; 您需要包括標題:
#include "tools.h"
此外,正如@StPiere指出的那樣,您需要將源文件tools.cpp
和生成的moc_*.cpp
文件包含到鏈接中。 如何通過自定義對g++
調用來實現此目的,所以您將自己嘗試一下; 不過,我會建議使用qmake
並成立了項目文件,這也將照顧moc
ING和許多其他Qt的具體細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.