qt - 对“_imp__Z*”的未定义引用
qt - undefined reference to `_imp__Z*'
大家好
请注意:这里是C++新手
我正在创建各种其他 c++ 功能之间的共享库以允许完整的理解,但是我不知所措。
问题:
如题所示,错误列表:
我不知道是什么原因造成的,谷歌搜索也没有提供太多见解。按照here的建议添加Q_Object
宏,我已经这样做了,但显然没有用。
各种其他 SO 帖子建议检查正确的 header,等等,这是正确的。
错误:
netm.cpp:3: error: undefined reference to `vtable for netm'
netm.cpp:3: error: undefined reference to `_imp___ZN4miscC1Ev'
netm.cpp:6: error: undefined reference to `vtable for netm'
netm.cpp:6: error: undefined reference to `_imp___ZN4miscC1Ev'
//...
我还有几个与上述类似的错误,但解决这些错误应该有助于我解决其余部分
从我遵循的所有教程等来看,我没有做任何异常的事情。
注意:我不确定需要哪些信息,如果需要更多信息,我很乐意分享。
//.pro
QT -= gui
QT += network
TARGET = netm
TEMPLATE = lib
DEFINES += NETM_LIBRARY
SOURCES += netm.cpp
HEADERS += netm.h\
netm_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
//netm_global.h - 全
#ifndef NETM_GLOBAL_H
#define NETM_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(NETM_LIBRARY)
# define NETMSHARED_EXPORT Q_DECL_EXPORT
#else
# define NETMSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // NETM_GLOBAL_H
//netm.h - 全
#ifndef NETM_H
#define NETM_H
#include "netm_global.h"
#include "../misc/misc.h"
#include "../gen/gen.h"
#include <QHostInfo>
#include <QTcpSocket>
class NETMSHARED_EXPORT netm
{
Q_OBJECT
public:
netm();
netm(QString hostname);
bool Send(int portNumber, char* message = NULL);
ReturnObject read();
bool isServerOnline(QString IP = QString());
int getPing(QString IP = QString());
void getIP();
void disconnectFromServer();
~netm();
private slots:
void getIP();
private:
misc m;
QHostInfo serverInfo;
QHostAddress serverIP;
QTcpSocket tcp_con;
};
#endif // NETM_H
//netm.cpp - 部分
#include "netm.h"
netm::netm(){ <--- ERROR line
}
netm::netm(QString hostname) <--- ERROR line
{
serverInfo.lookupHost(hostname, 0, SLOT(getIP()));
}
//...
非常感谢帮助(带解释)!
更新
按照建议,我在 misc.cpp
中定义了构造函数,因为它不存在。
重新编译,我读到一个错误,提到 netm
class 需要从 QObject 继承。
因此adding/changing:
//netm.h - 部分
#include //...
#include <QObject>
class NETMSHARED_EXPORT netm : public QObject
{
Q_OBJECT
public:
netm();
netm(QString hostname);
//...
};
错误仍然存在:
netm.cpp:3: error: undefined reference to `_imp___ZN4miscC1Ev'
netm.cpp:3: error: undefined reference to `_imp___ZN4miscD1Ev'
netm.cpp:6: error: undefined reference to `_imp___ZN4miscC1Ev'
netm.cpp:6: error: undefined reference to `_imp___ZN4miscD1Ev'
为了完整起见(misc
也是一个动态库):
//misc.h
#ifndef MISC_H
#define MISC_H
#include "misc_global.h"
#include <QString>
#include <QList>
class MISCSHARED_EXPORT misc
{
public:
misc();
~misc();
//String Literals
//Network related
static QString googleDNS;
//Command Codes
static QString CMD_AUTH;
static QString CMD_REQ;
//Request Codes
static QString REQ_USER_INFO;
static QString REQ_VPN_DATA;
static QString REQ_VPN_UP;
//...
};
//misc.cpp
#include "misc.h"
misc::misc(){
//Network related
QString googleDNS = QStringLiteral("8.8.8.8");
//Command Codes
QString CMD_AUTH = QStringLiteral("AUTH");
QString CMD_REQ = QStringLiteral("REQ");
//Request Codes
QString REQ_USER_INFO = QStringLiteral("USER_INFO");
QString REQ_VPN_DATA = QStringLiteral("VPN_DATA");
QString REQ_VPN_UP = QStringLiteral("VPN_UP");
}
misc::~misc(){}
如这里所见,构造函数存在,
还有其他想法吗?
缺少对 _imp___ZN4miscC1Ev
的调用,根据 c++filt
是 misc::misc()
,可能意味着 class misc
缺少已定义的默认构造函数。检查以确保您正在编译 misc::misc()
.
的定义
对于 vtable
错误,请确保您已经为 netm
中声明的每个函数(或至少所有虚函数)提供了定义(即使是空的或被删除的)在 netm
)。 class 的 vtable
引用每个虚函数,因此必须定义所有虚函数,否则将无法编译。
大家好
请注意:这里是C++新手
我正在创建各种其他 c++ 功能之间的共享库以允许完整的理解,但是我不知所措。
问题:
如题所示,错误列表:
我不知道是什么原因造成的,谷歌搜索也没有提供太多见解。按照here的建议添加Q_Object
宏,我已经这样做了,但显然没有用。
各种其他 SO 帖子建议检查正确的 header,等等,这是正确的。
错误:
netm.cpp:3: error: undefined reference to `vtable for netm'
netm.cpp:3: error: undefined reference to `_imp___ZN4miscC1Ev'
netm.cpp:6: error: undefined reference to `vtable for netm'
netm.cpp:6: error: undefined reference to `_imp___ZN4miscC1Ev'
//...
我还有几个与上述类似的错误,但解决这些错误应该有助于我解决其余部分
从我遵循的所有教程等来看,我没有做任何异常的事情。
注意:我不确定需要哪些信息,如果需要更多信息,我很乐意分享。
//.pro
QT -= gui
QT += network
TARGET = netm
TEMPLATE = lib
DEFINES += NETM_LIBRARY
SOURCES += netm.cpp
HEADERS += netm.h\
netm_global.h
unix {
target.path = /usr/lib
INSTALLS += target
}
//netm_global.h - 全
#ifndef NETM_GLOBAL_H
#define NETM_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(NETM_LIBRARY)
# define NETMSHARED_EXPORT Q_DECL_EXPORT
#else
# define NETMSHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // NETM_GLOBAL_H
//netm.h - 全
#ifndef NETM_H
#define NETM_H
#include "netm_global.h"
#include "../misc/misc.h"
#include "../gen/gen.h"
#include <QHostInfo>
#include <QTcpSocket>
class NETMSHARED_EXPORT netm
{
Q_OBJECT
public:
netm();
netm(QString hostname);
bool Send(int portNumber, char* message = NULL);
ReturnObject read();
bool isServerOnline(QString IP = QString());
int getPing(QString IP = QString());
void getIP();
void disconnectFromServer();
~netm();
private slots:
void getIP();
private:
misc m;
QHostInfo serverInfo;
QHostAddress serverIP;
QTcpSocket tcp_con;
};
#endif // NETM_H
//netm.cpp - 部分
#include "netm.h"
netm::netm(){ <--- ERROR line
}
netm::netm(QString hostname) <--- ERROR line
{
serverInfo.lookupHost(hostname, 0, SLOT(getIP()));
}
//...
非常感谢帮助(带解释)!
更新
按照建议,我在 misc.cpp
中定义了构造函数,因为它不存在。
重新编译,我读到一个错误,提到 netm
class 需要从 QObject 继承。
因此adding/changing:
//netm.h - 部分
#include //...
#include <QObject>
class NETMSHARED_EXPORT netm : public QObject
{
Q_OBJECT
public:
netm();
netm(QString hostname);
//...
};
错误仍然存在:
netm.cpp:3: error: undefined reference to `_imp___ZN4miscC1Ev'
netm.cpp:3: error: undefined reference to `_imp___ZN4miscD1Ev'
netm.cpp:6: error: undefined reference to `_imp___ZN4miscC1Ev'
netm.cpp:6: error: undefined reference to `_imp___ZN4miscD1Ev'
为了完整起见(misc
也是一个动态库):
//misc.h
#ifndef MISC_H
#define MISC_H
#include "misc_global.h"
#include <QString>
#include <QList>
class MISCSHARED_EXPORT misc
{
public:
misc();
~misc();
//String Literals
//Network related
static QString googleDNS;
//Command Codes
static QString CMD_AUTH;
static QString CMD_REQ;
//Request Codes
static QString REQ_USER_INFO;
static QString REQ_VPN_DATA;
static QString REQ_VPN_UP;
//...
};
//misc.cpp
#include "misc.h"
misc::misc(){
//Network related
QString googleDNS = QStringLiteral("8.8.8.8");
//Command Codes
QString CMD_AUTH = QStringLiteral("AUTH");
QString CMD_REQ = QStringLiteral("REQ");
//Request Codes
QString REQ_USER_INFO = QStringLiteral("USER_INFO");
QString REQ_VPN_DATA = QStringLiteral("VPN_DATA");
QString REQ_VPN_UP = QStringLiteral("VPN_UP");
}
misc::~misc(){}
如这里所见,构造函数存在,
还有其他想法吗?
缺少对 _imp___ZN4miscC1Ev
的调用,根据 c++filt
是 misc::misc()
,可能意味着 class misc
缺少已定义的默认构造函数。检查以确保您正在编译 misc::misc()
.
对于 vtable
错误,请确保您已经为 netm
中声明的每个函数(或至少所有虚函数)提供了定义(即使是空的或被删除的)在 netm
)。 class 的 vtable
引用每个虚函数,因此必须定义所有虚函数,否则将无法编译。