【问题标题】:QtCreator undefined reference using FTD2XX C++使用 FTD2XX C++ 的 QtCreator 未定义引用
【发布时间】:2015-03-03 17:19:01
【问题描述】:

所以我已经玩了一个星期了,我认为是时候调用一些备份了。我目前正在开发一些软件来与我正在开发的一些板进行通信。这些板有来自 FTDI 的 ft230 芯片,所以我使用他们的 FTD2XX 库来与它们交互。这就是问题的开始。

很长一段时间以来,我一直在为某些函数而不是其他函数收到“未定义引用”错误。所以我认为链接器是正确的,它只是不适用于所有功能。我的环境是基于 QT 5.4.0 的 QtCreator 3.3.0。编译器是 MinGW 4.9.1。操作系统为 Windows 8.1。我已经从 ftdichips.com 下载了 8.1 的最新驱动程序。以下是给我问题的函数:

#include <windows.h>
#include "ftdiDriver/ftdi.h"
#include <ftd2xx.h>
#include <QDebug>

void ftdiConnect(void){
    // Variables for FTDI communicaiton
    FT_STATUS ftStatus;
    FT_DEVICE_LIST_INFO_NODE *devInfo;
    DWORD numDevs;

    // create the device information list
    ftStatus = FT_CreateDeviceInfoList(&numDevs);

    if (ftStatus == FT_OK) {
        qDebug() << "Number of devices is: " << numDevs;
    }
    if (numDevs > 0) {
        // allocate storage for list based on numDevs
        devInfo = (FT_DEVICE_LIST_INFO_NODE*)malloc(sizeof(FT_DEVICE_LIST_INFO_NODE)*numDevs);

        // get the device information list
        ftStatus = FT_GetDeviceInfoList(devInfo, &numDevs);

        if (ftStatus == FT_OK) {
            for (int i = 0; i < numDevs; i++) {
                qDebug() << "Dev: " << i;
                qDebug() << " Flags: " << devInfo[i].Flags;
                qDebug() << " Type: " << devInfo[i].Type;
                qDebug() << " ID: " << devInfo[i].ID;
                qDebug() << " LocId: " << devInfo[i].LocId;
                qDebug() << " SerialNumber: " << devInfo[i].SerialNumber;
                qDebug() << " Description: " << devInfo[i].Description;
                qDebug() << " ftHandle: " << devInfo[i].ftHandle;
            }
        }
    }
}

我搜索了几个论坛。似乎大多数人都能够将 .lib 文件包含在他们的项目文件中,并且一切似乎都有效。我已经尝试了这个的每一种组合,我有同样的问题。由于(例如 FT_ListDevices)的某些功能,我认为这不是问题所在。某些功能起作用而其他功能不起作用是没有意义的。我给 FTDIchips 打了电话,他们告诉我,他们有时间查看问题时会回复我,但同时不知道有什么可以尝试的。

如果您认为这会有所帮助,我也可以在此问题中包含项目文本。我只是不想让它变得混乱。

【问题讨论】:

  • 您得到了哪些“未定义的引用错误”?是否还有 main 函数或其他入口点?

标签: c qt dll mingw ftdi


【解决方案1】:

链接器的“未定义引用”意味着 (i) 您没有提供引用的那些函数(没有 .lib 文件),或者 (ii) 您提供了错误的东西(例如,32 位而不是 64 位),或者(iii) 你请求了错误的函数(错误的函数名或错误的修饰符)。

无论如何,这完全是你的错。最后,您应该阅读一些有关将可执行文件与外部库和 dll 链接起来的内容,然后开始动脑筋。请求技术支持是一种耻辱,只是因为您懒得阅读链接器指南。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2014-07-13
    • 2021-01-03
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2013-05-27
    相关资源
    最近更新 更多