6

静的リンクが機能していたことが判明しましたが、Qt ライブラリに対してのみです。サードパーティ ライブラリ QtSerialPort が静的にリンクしていません。再調査の結果、このライブラリを静的にビルドするか、.pro ファイル内の .pri ファイルに直接リンクする必要があることがわかりました。

QtSerialPort は静的リンク用に設計されていないように見えるため、どちらの方法もわかりません。

私が本当に理解していない.priメソッドは、次の2つのリンクで漠然と説明されています: http://qt-project.org/forums/viewthread/15223 http://www.qtcentre.org/archive/index.php /t-54505.html

これらの方法のいずれかを機能させる方法について、誰かアドバイスがありますか? それとも別の方法でしょうか?

また、MSVCP100.dll は静的にリンクしていません。

================================================== ================================

スタンドアロン アプリケーションを作成できるように、Qt にライブラリを静的にリンクさせようとしています。Qt を静的にビルドしてから静的アプリケーションをビルドする方法に関するさまざまなチュートリアルに従いましたが、うまくいきません。アプリケーションのサイズが 79KB から 7+MB に増加したため、静的リンクを使用して Qt を正常にビルドできたと思いますが、QtCore4.dll と QtSerialPort.dll が見つからないというエラーが引き続き発生します。また、この静的構成を使用するときに発生する別の問題は、それほど深刻ではありませんが、プログラムを閉じると、Windows がクラッシュしたと見なし、MyProgram.exe が動作を停止したというウィンドウが表示されることです...

Qt 4.8.5 で MSVC 2010 を使用している Windows マシンを使用しており、サードパーティ ライブラリ QtSerialPort を使用しています。

私が読んでいるガイドに従って行ったことは次のとおりです。

qt-everywhere-opensource-src-4.8.5.zip をダウンロードして解凍します /mkspec/mwin32-msvc2010/qmake.conf を開き、次の行を次のように変更します

CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target

QMAKE_CLFAGS_RELEASE = -O2 -MT

次に、MSVC2010 コマンド プロンプトを開き、これに cd します。次に、コマンドを入力します

configure -static -release -platform win32-msvc2010
nmake sub-src

これが完了したら、プロジェクトを開いて追加します

CONFIG += static

.pro ファイルに。QtCreator で、[プロジェクト]、[キットの管理]、[Qt バージョン] の順に移動し、生成した qMake を参照します。このバージョンの qMake で新しいキットを追加します。次に、すべてをクリーンアップしてこの新しいキットに切り替え、QtCreator から qmake を実行します。次に、msvc2010 コマンド プロンプトを使用して、ファイルが生成されたディレクトリに移動し、

nmake release

これにより、かなり大きな .exe が生成されますが、前述したように、まだいくつかの .dll に依存しています。

4

1 に答える 1

-1

外部ライブラリの静的リンクには、いくつかのオプションがあり、どちらにも長所と短所があります。

I. 静的リンク用のライブラリを自分でコンパイルします。それにリンクします。

  1. 静的リンク用の既存の構成スイッチの可能性を探します。QTSERIALPORT_STATIC = noライブラリの.pro/.priファイルには、などのようなものがある場合があります。yesライブラリを静的リンク用にコンパイルするように言って、ステップ 4 に進みます。

  2. ファイルでに.pro/.pri置き換えます。CONFIG += dllCONFIG += static

  3. ライブラリからエクスポート宣言を削除します。通常、Qt ライブラリ シンボルは、リンク時に共有ライブラリ ビルド / そのヘッダー ファイルの使用にQTSERIALPORT_EXPORT展開されるような定義で宣言されます。Q_DECL_EXPORT/Q_DECL_IMPORTこれが定義されている場所を見つけQTSERIALPORT_EXPORTて、空の定義に置き換える必要があります。

    #define QTSERIALPORT_EXPORT // in source file
    

    また

    DEFINES += QTSERIALPORT_EXPORT # in .pro/.pri file
    
  4. ライブラリをビルドします。

  5. ライブラリ ファイルにリンクし、.lib/.aプロジェクトのシンボル宣言にライブラリ ヘッダー ファイルを使用します。

Ⅱ.ライブラリ ソース ファイルをプロジェクトに含め、その中でコンパイルします (リンクは一切行いません)。

  1. ライブラリのすべてのソース ファイルをプロジェクトに含めます ( SOURCESqmake プロジェクト ファイルに追加します)。

  2. ライブラリが依存するすべてのもの (他のライブラリ、Qt オプションなど) を決定し、それも.proファイルに含めます。または、ライブラリの作成者がプロジェクト内コンパイル用に適切な.priファイルを.pro提供している場合 (つまりinclude(QtSerialPort.pri)、何か)、適切なファイルを含めます。

  3. パート I の項目 3 で説明されているように、ライブラリ ソース コードから export/import 宣言を削除します。

  4. プロジェクトをビルドします。

于 2014-01-03T19:16:18.817 に答える