对错误的未定义引用

undefined reference to errors

本文关键字:引用 未定义 错误      更新时间:2023-10-16

我正在尝试用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文件。