首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对错误的未定义引用

对错误的未定义引用
EN

Stack Overflow用户
提问于 2015-02-18 13:26:30
回答 1查看 791关注 0票数 1

我正在尝试用QtCreator c++编写ModBus/TCP连接代码。然而,我无法摆脱未定义的错误。这是我的代码:

modbus.cpp:

代码语言:javascript
运行
复制
#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]: %hd\n", 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:

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

错误消息是:

代码语言:javascript
运行
复制
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文件:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-18 13:53:27

你有连接问题。当您使用外部库时,某些函数可能在对象文件中有它们的定义,即在编译程序时必须链接。

不幸的是,我从来没有使用过ModBus,所以我不能给您提供关于如何链接到它的精确信息,但是根据关于网站的教程,您需要编译源代码才能获得二进制文件。

之后,您需要在您的项目中链接到它们。在Qt中,这样做的方法是添加:

代码语言:javascript
运行
复制
LIBS += -L/path/to/mbus -lmbusmaster

到您的.pro文件。

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

https://stackoverflow.com/questions/28584757

复制
相关文章

相似问题

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