所以我现在已经玩了一个星期了,我觉得是时候打电话给一些备份了。我目前正在开发一些软件来与我正在开发的一些电路板进行通信。这些主板有来自FTDI的ft230芯片,因此我使用他们的FTD2XX库与它们连接。这就是问题的开始。
我得到的最长时间" Undefined Reference"某些功能的错误,而不是其他功能。所以我认为链接器是正确的,它不适用于所有功能。我的环境是基于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了,他们告诉我,当他们有时间查看这个问题时他们会回复我,但不知道有什么可以尝试的。
如果您认为这会有所帮助,我也可以在此问题中包含项目文本。我只是不想让它变得杂乱无章。
答案 0 :(得分:0)
链接器的“未定义引用”是指(i)您没有提供引用的那些函数(没有.lib文件),或者(ii)您提供了错误的东西(例如,32位而不是64位),或者(iii)您要求错误的功能(错误的功能名称或错误的修饰符)。
无论如何,它完全是你的错误。您最后应该阅读有关将可执行文件与外部库和dll连接的内容,并开始使用您的头脑。要求技术支持是一种耻辱,只是因为你懒得阅读一些链接器的指南。