Logo Hardware.com.br
Raul_Kl
Raul_Kl Veterano Registrado
1.2K Mensagens 65 Curtidas

[Resolvido] Erro no Qt Creator: "referência indefinida para..."

#1 Por Raul_Kl 10/08/2017 - 21:10
Estou tentando criar um programa para ler um leitor biométrico Nitgen e imprimir uma string adaptando partes de um projeto de exemplo(NBioBSP_Demo) incluído no SDK, criado no Qt Creator.
Estou usando também o Qt Creator para tentar "facilitar", mas a princípio não está dando certo...

Estou tendo o seguinte erro na hora de compilar: "referência indefinida para...".
Esse erro é acusado para qualquer método da NBioAPI, como por exemplo: NBioAPI_OpenDevice, NBioAPI_FreeFIRHandle, NBioAPI_GetOpenedDeviceID, etc.

Segue o código que tenho até o momento:

fpget.h

#ifndef FPGET_H
#define FPGET_H

#include <QObject>
#include "../../../include/NBioAPI.h"

#ifndef LPBYTE
typedef unsigned char* LPBYTE;
#endif // LPBYTE

class FPGet : public QObject
{
Q_OBJECT
public:
explicit FPGet(QObject *parent = 0);
~FPGet();
NBioAPI_RETURN fpEcho();

protected:
void MakeStreamFromTextFIR(NBioAPI_FIR_TEXTENCODE_PTR pTextFIR, LPBYTE pTextStream);

private:
NBioAPI_HANDLE m_hNBioBSP;
NBioAPI_FIR_HANDLE m_hCapturedFIR;

signals:

public slots:
};

#endif // FPGET_H


fpget.cpp

#include "fpget.h"
#include "QTextStream"

FPGet::FPGet(QObject *parent) : QObject(parent)
{
m_hNBioBSP = NBioAPI_NULL;
m_hCapturedFIR = NBioAPI_NULL;
//Open Device
NBioAPI_OpenDevice(m_hNBioBSP, NBioAPI_DEVICE_ID_AUTO);
}

FPGet::~FPGet()
{
//Free FIR Handle.
if (m_hNBioBSP) {
if (m_hCapturedFIR)
NBioAPI_FreeFIRHandle(m_hNBioBSP, m_hCapturedFIR);

NBioAPI_DEVICE_ID deviceID = NBioAPI_GetOpenedDeviceID(m_hNBioBSP);

//Device Close.
if (NBioAPI_DEVICE_ID_NONE != deviceID)
NBioAPI_CloseDevice(m_hNBioBSP, deviceID);

//NBioAPI Terminate
NBioAPI_Terminate(m_hNBioBSP);
}
}

NBioAPI_RETURN FPGet::fpEcho()
{
NBioAPI_RETURN nRet;
NBioAPI_FIR_TEXTENCODE textFIR; //In coding Text FIR

nRet = NBioAPI_Capture(m_hNBioBSP, NBioAPI_FIR_PURPOSE_VERIFY, &m_hCapturedFIR, -1, NULL, NULL);

memset(&textFIR, 0, sizeof(NBioAPI_FIR_TEXTENCODE));

//Get ExtendText FIR data from Handle
nRet = NBioAPI_GetExtendedTextFIRFromHandle(m_hNBioBSP, m_hCapturedFIR, &textFIR, NBioAPI_FALSE, NBioAPI_FIR_FORMAT_STANDARD);

if (NBioAPIERROR_NONE == nRet) {
LPBYTE pBinaryTextFIR = NULL;
size_t dwLen = strlen(textFIR.TextFIR);

pBinaryTextFIR = new unsigned char[dwLen];

if (pBinaryTextFIR) {
MakeStreamFromTextFIR(&textFIR, pBinaryTextFIR);
nRet = NBioAPI_GetExtendedTextFIRFromHandle(m_hNBioBSP, m_hCapturedFIR, &textFIR, NBioAPI_FALSE, NBioAPI_FIR_FORMAT_STANDARD);
if (nRet == NBioAPIERROR_NONE) {
QTextStream(stdout) << textFIR.TextFIR << endl;
}
}
}
return nRet;
}

void FPGet::MakeStreamFromTextFIR(NBioAPI_FIR_TEXTENCODE_PTR pTextFIR, LPBYTE pTextStream)
{
memcpy(pTextStream, pTextFIR->TextFIR, strlen(pTextFIR->TextFIR));
}


main.cpp

#include <QCoreApplication>
#include "fpget.h"

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

return a.exec();
}


FPGet.pro

QT += core
QT -= gui

CONFIG += c++11

TARGET = FPGet
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
fpget.cpp

HEADERS += \
fpget.h


Alguém tem alguma ideia de qual pode ser o problema?
Raul_Kl
Raul_Kl Veterano Registrado
1.2K Mensagens 65 Curtidas
#2 Por Raul_Kl
11/08/2017 - 12:11
Acabei encontrando meu erro(esse tópico funcionou como um rubber duck).
Faltava incluir a lib no arquivo .pro.
Seguem abaixo os fontes dos arquivos atualizados:

fpget.pro

QT += core
QT -= gui

CONFIG += c++11

TARGET = FPGet
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
fpget.cpp

HEADERS += \
fpget.h

LIBS += -lNBioBSP


main.cpp

#include <QCoreApplication>
#include "fpget.h"

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
FPGet fp;
fp.fpEcho();
return a.exec();
}


fpget.h

#ifndef FPGET_H
#define FPGET_H

#include <QObject>
#include "../../../include/NBioAPI.h"

#ifndef LPBYTE
typedef unsigned char* LPBYTE;
#endif // LPBYTE

class FPGet : public QObject
{
Q_OBJECT
public:
explicit FPGet(QObject *parent = 0);
~FPGet();
NBioAPI_RETURN fpEcho();

protected:
void MakeStreamFromTextFIR(NBioAPI_FIR_TEXTENCODE_PTR pTextFIR, LPBYTE pTextStream);

private:
NBioAPI_HANDLE m_hNBioBSP;
NBioAPI_FIR_HANDLE m_hCapturedFIR;

signals:

public slots:
};

#endif // FPGET_H


fpget.cpp

#include "fpget.h"
#include "QTextStream"

FPGet::FPGet(QObject *parent) : QObject(parent)
{
m_hNBioBSP = NBioAPI_NULL;
m_hCapturedFIR = NBioAPI_NULL;
fpEcho();
exit(0);
}

FPGet::~FPGet()
{
//Free FIR Handle.
if (m_hNBioBSP) {
if (m_hCapturedFIR)
NBioAPI_FreeFIRHandle(m_hNBioBSP, m_hCapturedFIR);

NBioAPI_DEVICE_ID deviceID = NBioAPI_GetOpenedDeviceID(m_hNBioBSP);

//Device Close.
if (NBioAPI_DEVICE_ID_NONE != deviceID)
NBioAPI_CloseDevice(m_hNBioBSP, deviceID);

//NBioAPI Terminate
NBioAPI_Terminate(m_hNBioBSP);
}
}

NBioAPI_RETURN FPGet::fpEcho()
{
NBioAPI_RETURN nRet;
NBioAPI_FIR_TEXTENCODE textFIR; //In coding Text FIR

// NBioBSP SDK module initialization.
nRet = NBioAPI_Init(&m_hNBioBSP);

//Open Device
NBioAPI_OpenDevice(m_hNBioBSP, NBioAPI_DEVICE_ID_AUTO);

nRet = NBioAPI_Capture(m_hNBioBSP, NBioAPI_FIR_PURPOSE_VERIFY, &m_hCapturedFIR, -1, NULL, NULL);

memset(&textFIR, 0, sizeof(NBioAPI_FIR_TEXTENCODE));

//Get ExtendText FIR data from Handle
nRet = NBioAPI_GetExtendedTextFIRFromHandle(m_hNBioBSP, m_hCapturedFIR, &textFIR, NBioAPI_FALSE, NBioAPI_FIR_FORMAT_STANDARD);

if (NBioAPIERROR_NONE == nRet) {
LPBYTE pBinaryTextFIR = NULL;
size_t dwLen = strlen(textFIR.TextFIR);

pBinaryTextFIR = new unsigned char[dwLen];

if (pBinaryTextFIR) {
MakeStreamFromTextFIR(&textFIR, pBinaryTextFIR);
nRet = NBioAPI_GetExtendedTextFIRFromHandle(m_hNBioBSP, m_hCapturedFIR, &textFIR, NBioAPI_FALSE, NBioAPI_FIR_FORMAT_STANDARD);
if (nRet == NBioAPIERROR_NONE) {
QTextStream(stdout) << textFIR.TextFIR << endl;
}
}
}
return nRet;
}

void FPGet::MakeStreamFromTextFIR(NBioAPI_FIR_TEXTENCODE_PTR pTextFIR, LPBYTE pTextStream)
{
memcpy(pTextStream, pTextFIR->TextFIR, strlen(pTextFIR->TextFIR));
}


O código ainda está com muita coisa que pode ser otimizada ou removida, mas pode servir como ponto de partida se alguém precisar.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal