我正在将一个项目从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"
但是我一直得到这些错误:
./releasegpssettingswidget.o:gpssettingswidget.cpp:(.text+0x4ecc): undefined reference to `QtAddOn::SerialPort::SerialPortInfo::availablePorts()'
Makefile.Release:922: recipe for target '..ReleaseSwibz.exe' failed
./releasegpssettingswidget.o:gpssettingswidget.cpp:(.text+0x4f3e): undefined reference to `QtAddOn::SerialPort::SerialPortInfo::portName() const'
./releasegpssettingswidget.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: ./releasegpssettingswidget.o: bad reloc address 0xd in section `.text$_ZN25Ui_GPSSettingsWidgetClass13retranslateUiEP14SettingsWidget[__ZN25Ui_GPSSettingsWidgetClass13retranslateUiEP14SettingsWidget]'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [..ReleaseSwibz.exe] Error 1
我知道这是一个链接错误,因为"返回1退出状态"我试过链接libQt5SerialPortd。a, libQt5SerialPort.dll和libQt5SerialPort.dll,但它抛出相同的错误
(顺便说一下,如果有人知道libNAMEd。a和libNAME。A请分享你的知识)
也许QtAddOn现在在另一个库中?因为否则它不应该识别许多其他函数,而不仅仅是那些带有QtAddOn的函数。
非常感谢。我不知道没有stackoverflow我该怎么办。
EDIT好吧,我发现这告诉改变任何SerialPortInfo声明的变量为QSerialPortInfo,我已经在我的项目中这样做了,我得到了新的错误,但现在我不确定哪一个#包括我应该放:
#include <QtSerialPort>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QtSerialPort/QtSerialPort>
我已经尝试了每一个这些和所有给我错误。我会继续尝试,看看是否有什么问题
QtSerialPort现在是Qt的一部分,它在5.1.0版本正式成为Qt的一部分。如果您使用的是新版本的Qt,则不需要单独获取源代码并链接到它。
要在Qt 5中使用该模块,请将这一行添加到qmake项目文件中:
QT += serialport
然后可以包含头文件。要在应用程序中使用这些类,请使用以下include语句:
#include <QtSerialPort/QtSerialPort>
这些类有很好的文档。