неопределенная ссылка на ошибки

Я пытаюсь закодировать соединение ModBus / TCP с QtCreator c ++. Однако я не мог избавиться от неопределенных ошибок. Вот мой код:

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]: %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:

#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 = appSOURCES += main.cpp\
dialog.cpp \
modbus.cpp

HEADERS  += dialog.h \
modbus.h

FORMS    += dialog.ui

1

Решение

У вас проблема со связыванием. Когда вы используете внешнюю библиотеку, некоторые функции могут иметь свое определение в объектном файле, с которым вам придется ссылаться при компиляции вашей программы.

К сожалению, я никогда не работал с ModBus, поэтому я не могу дать вам точную информацию о том, как на него ссылаться, но в соответствии с руководством на их Веб-сайт, вам нужно скомпилировать исходный код, чтобы получить двоичные файлы.

После этого вам нужно сослаться на них в вашем проекте. В Qt способ сделать это — добавить:

LIBS += -L/path/to/mbus -lmbusmaster

На ваш .pro файл.

0

Другие решения


По вопросам рекламы [email protected]