我正在将一个项目从 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>
我已经尝试了其中的每一个,但都给了我错误。我会继续尝试,看看是否有什么清楚的