QtAddon SerialPort从Qt4到Qt5

时间:2014-05-07 07:01:07

标签: c++ qt qt4 qt5 qtserialport

我正在将项目从Qt4迁移到Qt5。我完成了项目本身的迁移,现在我正在研究这些库。到目前为止,我还没有很多问题转换并将它们链接到项目中,但是这个问题正在抛出未定义的引用。

该项目使用QtSerialPort,它使用Qt4版本完美编译,并在.pro文件中链接如下:

-l:"C:/Users/Sprint/Desktop/swe/marssies/libQtSerialPort.a" \

我用/为Qt5编译了串口库,并将其链接如下:

-l:"C:/Users/Sprint/Desktop/swe/marssies/libQt5SerialPort.a" \

但我一直收到这些错误:

./release\gpssettingswidget.o:gpssettingswidget.cpp:(.text+0x4ecc): undefined reference to `QtAddOn::SerialPort::SerialPortInfo::availablePorts()'
Makefile.Release:922: recipe for target '..\Release\Swibz.exe' failed
./release\gpssettingswidget.o:gpssettingswidget.cpp:(.text+0x4f3e): undefined reference to `QtAddOn::SerialPort::SerialPortInfo::portName() const'
./release\gpssettingswidget.o:gpssettingswidget.cpp:(.text+0x4f5d): undefined reference to `QtAddOn::SerialPort::SerialPortInfo::description() const'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: ./release\gpssettingswidget.o: bad reloc address 0xd in section `.text$_ZN25Ui_GPSSettingsWidgetClass13retranslateUiEP14SettingsWidget[__ZN25Ui_GPSSettingsWidgetClass13retranslateUiEP14SettingsWidget]'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [..\Release\Swibz.exe] Error 1

我知道它是一个链接器错误,因为" ld返回1退出状态" 我已经尝试链接libQt5SerialPortd.a,libQt5SerialPort.dll和libQt5SerialPortd.dll,但它会抛出相同的错误
(顺便说一句,如果有人知道libNAMEd.a和libNAME.a之间的区别,请分享您的知识)

也许QtAddOn现在在另一个库中?因为否则它不应该识别许多其他功能,而不仅仅是QtAddOn的功能 非常感谢你。我不知道没有stackoverflow会怎么做。

编辑好吧,我发现this告诉我将任何SerialPortInfo声明的变量更改为QSerialPortInfo,我已经在我的项目中完成了这个并且我遇到了新的错误,但现在我不是确定我应该放哪个#include:

#include <QtSerialPort>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QtSerialPort/QtSerialPort>

我已经尝试了其中的每一个并且都给了我错误。我会继续尝试,看看有什么事情变得清晰

1 个答案:

答案 0 :(得分:1)

QtSerialPort现在是Qt的一部分。它正式成为Qt与5.1.0版本的一部分。如果您使用新版本的Qt,则无需单独获取源代码并链接到它。

要将模块与Qt 5一起使用,请将此行添加到qmake项目文件中:

QT += serialport

然后,您可以包含头文件。要在应用程序中使用这些类,请使用以下include语句:

#include <QtSerialPort/QtSerialPort>

这些课程有很好的文档。您可以从Qt Assistant查看。