2

プロジェクトを Qt4 から Qt5 に移行しています。プロジェクト自体の移行が完了し、現在はライブラリに取り組んでいます。これまでのところ、変換してプロジェクトにリンクする際に多くの問題はありませんでしたが、これは未定義の参照をスローしています。

プロジェクトは QtSerialPort を使用し、Qt4 バージョンを使用して完全にコンパイルされ、.pro ファイルで次のようにリンクされました。

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

Qt5 を使用して、または 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 を持つ関数だけでなく、他の多くの関数を認識できないためです。
どうもありがとうございました。スタックオーバーフローなしで何をするかわかりません。

編集わかりました、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 に答える