gpt4 book ai didi

c++ - Qt Creator 链接错误 : undefined reference to `KFUNC'

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:15 24 4
gpt4 key购买 nike

) 我目前正在 Qt Creator 4.3.1 下开发一个项目,它需要一个外部库来使用键锁硬件设备。

该设备附带一张 CD,其中包含库 libkfunc64.solibkfunc64.a(以及 32 位版本),大概是为 C 编译的> 使用 gcc。我已经在虚拟程序中尝试了这些库,以检查它们是否有效,它们确实有效。

但是当我将重要的代码块添加到 Qt 项目中时,它会出现以下错误

 [...] error: undefined reference to `KFUNC(unsigned int, unsigned int, unsigned int, unsigned int)'

我已经尝试包含库

  • 通过将库复制到系统目录并在 .pro 文件中简单地包含以下行

    LIBS += -lkfunc64

  • 使用 .pro 文件中库的相对路径

    LIBS += -L$$PWD/../build-project/ -lkfunc64

    INCLUDEPATH += $$PWD/../build-Qmetrics-Desktop-Debug DEPENDPATH += $$PWD/../build-Qmetrics-Desktop-Debug

    # PRE_TARGETDEPS += $$PWD/../build-Qmetrics-Desktop-Debug/libkfunc64.a

但在尝试(重新)构建它时它一直显示此错误。我在互联网上阅读了几乎所有关于这个问题的主题,但没有一个能解决这个问题。

这是main.cpp的代码

#include "mainwindow.h"

#include <QApplication>
#include <QMessageBox>

// Key-lock stuff ----------
#define ValidateCode1 0X488B
#define ValidateCode2 0XFEE2
#define ValidateCode3 0XEF90
#define ClientIDCode1 0xB862
#define ClientIDCode2 0x54CB
#define ReadCode1 0X1772
#define ReadCode2 0XC4E6
#define ReadCode3 0XBCF8

extern unsigned long KFUNC(unsigned, unsigned, unsigned, unsigned);
unsigned RotateLeft(unsigned, int);
void KTASK(unsigned, unsigned, unsigned, unsigned);
unsigned short ReturnValue1, ReturnValue2;
// -------------------------

int main(int argc, char *argv[])
{
KTASK(1, ValidateCode1, ValidateCode2, ValidateCode3);
KTASK(RotateLeft(ReturnValue1, ReturnValue2 & 7) ^ ReadCode3 ^ ReturnValue2, RotateLeft(ReturnValue2, ReturnValue1 & 15), ReturnValue1 ^ ReturnValue2, 0);

if ((ReturnValue1 == ClientIDCode1) && (ReturnValue2 == ClientIDCode2))
{
QApplication app(argc, argv);

MainWindow w;
w.showFullScreen();

return app.exec();
}
else
{
QMessageBox msgBox;
msgBox.setText("Wrong or missing key-lock!");
return msgBox.exec();
}
}

unsigned RotateLeft(unsigned Target, int Counts)
{
int i;
static unsigned LocalTarget, HighBit;
LocalTarget = Target;
for (i=0; i<Counts; i++)
{
HighBit = LocalTarget & 0X8000;
LocalTarget = (LocalTarget << 1) + (HighBit >> 15);
}
LocalTarget = LocalTarget & 0XFFFF; /* For 32 bit integers */
return (LocalTarget);
}

void KTASK(unsigned CommandCode, unsigned Argument2, unsigned Argument3, unsigned Argument4)
{
unsigned long int ReturnValue;
ReturnValue = KFUNC(CommandCode, Argument2, Argument3, Argument4); // <--- this is the only function that is used from the external library
ReturnValue1 = (unsigned) (ReturnValue & 0XFFFF);
ReturnValue2 = (unsigned) (ReturnValue >> 16);
}

.pro 文件的(相关部分)如下

# Adds OpenCV, DC1394 and Keylok libraries
unix {
CONFIG += link_pkgconfig
PKGCONFIG += opencv
LIBS += -ldc1394 -lkfunc64
}

我真的不知道该怎么办:'(

最佳答案

您是否尝试过使用 extern "C"声明函数?

例如:

#ifdef __cplusplus
extern "C"
{
#endif

extern unsigned long KFUNC(unsigned, unsigned, unsigned, unsigned);

#ifdef __cplusplus
};
#endif

这是从 C++ 调用外部 C 函数所必需的。

关于c++ - Qt Creator 链接错误 : undefined reference to `KFUNC' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46031466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com