对错误的未定义引用
undefined reference to errors
我正在尝试用QtCreator c++对ModBus/TCP连接进行编码。然而,我无法消除未定义的错误。这是我的代码:
modbus.cpp:
#include "modbus.h"
modbus::modbus()
{
hostName = "127.0.0.1";
openProtocol();
runPollLoop();
closeProtocol();
}
void modbus::openProtocol()
{
int result;
result = mbusProtocol->openProtocol(hostName);
if (result != FTALK_SUCCESS)
{
fprintf(stderr, "Error opening protocol: %s!n",
getBusProtocolErrorText(result));
exit(EXIT_FAILURE);
}
}
void modbus::closeProtocol()
{
mbusProtocol->closeProtocol();
}
void modbus::runPollLoop()
{
short dataArr[10];
for (;;)
{
int i;
int result;
result = mbusProtocol->readMultipleRegisters(1, 100,
dataArr,
sizeof(dataArr) / 2);
if (result == FTALK_SUCCESS)
for (i = 0; i < int(sizeof(dataArr) / 2); i++)
printf("[%d]: %hdn", 100 + i, dataArr[i]);
else
{
fprintf(stderr, "%s!n", getBusProtocolErrorText(result));
// Stop for fatal errors
if (!(result & FTALK_BUS_PROTOCOL_ERROR_CLASS))
return;
}
#ifdef __WIN32__
Sleep(1000);
#else
sleep(1);
#endif
}
}
modbus.h:
#ifndef MODBUS_H
#define MODBUS_H
#include <stdio.h>
#include <stdlib.h>
#include "MbusTcpMasterProtocol.hpp"
class modbus
{
public:
modbus();
char *hostName;
MbusTcpMasterProtocol *mbusProtocol;
void openProtocol();
void closeProtocol();
void runPollLoop();
};
#endif // MODBUS_H
错误消息为:
In function `modbus::openProtocol()':
error: undefined reference to `MbusTcpMasterProtocol::MbusTcpMasterProtocol()'
error: undefined reference to `MbusTcpMasterProtocol::openProtocol(char const*)'
error: undefined reference to `getBusProtocolErrorText'
In function `modbus::runPollLoop()':
error: undefined reference to `MbusMasterFunctions::readMultipleRegisters(int, int, short*, int)'
error: undefined reference to `getBusProtocolErrorText'
collect2: ld returned 1 exit status
你能帮忙解决这个问题吗?
编辑:
这是.pro文件:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ModBus
TEMPLATE = app
SOURCES += main.cpp
dialog.cpp
modbus.cpp
HEADERS += dialog.h
modbus.h
FORMS += dialog.ui
您遇到了链接问题。当你使用外部库时,一些函数可能在对象文件中有它们的定义,当你编译程序时,你必须链接到它。
不幸的是,我从未使用过ModBus,所以我不能给你关于如何链接它的确切信息,但根据他们网站上的教程,你需要编译源代码才能获得二进制文件。
之后,您需要在项目中链接到它们。在Qt中,这样做的方法是添加:
LIBS += -L/path/to/mbus -lmbusmaster
到您的.pro
文件。
相关文章:
- 编译C++时未定义的引用
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 对 Scalar ::Scalar() 的未定义引用
- 已定义函数时出现 G++ "未定义的引用"错误
- 链接 cmake 时出现未定义的引用错误
- 对复制 CTOR 和 CTOR 的未定义引用
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 右值引用未定义的行为
- 对"vtable for DigitalClock"的未定义引用 - 未定义对"DigitalClock::staticMetaObject"的引用 - Qt
- 函数类型到函数类型的引用:未定义的引用
- avcodec_alloc_context引用未定义,但ffmpeg链接顺序正确
- 从c++调用Fortran子程序,链接时引用未定义
- 枚举引用未定义,但位于包含的头文件中