2

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

该项目使用QtSerialPort,它使用它的Qt4版本完美编译,它在.pro文件中是这样链接的:

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

我已经用/for 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我会做什么。

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

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

我已经尝试了其中的每一个,但都给了我错误。我会继续尝试,看看是否有什么清楚的

4

1 回答 1

1

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

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

QT += serialport

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

#include <QtSerialPort/QtSerialPort>

这些类有很好的文档。您可以从 Qt Assistant 中查看它。

于 2014-05-07T07:19:11.733 回答