web-dev-qa-db-ja.com

Qt Creatorプロジェクトに外部ライブラリを追加する

Qt Creator RC1(バージョン0.9.2)でビルドされたプロジェクトに外部ライブラリを追加するにはどうすればよいですか?たとえば、win32関数EnumProcesses()では、ビルドするプロジェクトにPsapi.libを追加する必要があります。

105
Donotalo

これを行う適切な方法は次のとおりです。

LIBS += -L/path/to -lpsapi

これにより、Qtがサポートするすべてのプラットフォームで動作します。これは、ディレクトリをライブラリ名から分離する必要があるということです(拡張子と「lib」プレフィックスなし)。もちろん、Windows固有のライブラリを含める場合、これは実際には問題ではありません。

Libファイルをプロジェクトディレクトリに保存する場合は、$$_PRO_FILE_PWD_変数を使用して参照できます。例:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
210
Ben

qmakeプロジェクトを使用していますか?その場合、 LIBS 変数を使用して外部ライブラリを追加できます。例えば:

win32:LIBS += path/to/Psapi.lib
22
dirkgently

LIBS + = C:\ Program Files\OpenCV\lib

program Filesで空白を使用しているため、機能しません。この場合、引用符を追加する必要があるため、結果は次のようになります。LIBS + = "C:\ Program Files\OpenCV\lib"ライブラリを空白以外の場所に配置することをお勧めします;-)

11
martin

あなたが意味するエラーは、追加のインクルードパスがないことによるものです。 INCLUDEPATH + = C:\ path\to\include\files \で追加してみてください。よろしく。

6
fernando

また、複数のライブラリファイルを追加するには、次のように記述できます。

INCLUDEPATH * = E:/ DebugLibrary/VTK E:/ DebugLibrary/VTK/Common E:/ DebugLibrary/VTK/Filtering E:/ DebugLibrary/VTK/GenericFiltering E:/ DebugLibrary/VTK/Graphics E:/ DebugLibrary/VTK/GUISupport/Qt E:/ DebugLibrary/VTK/Hybrid E:/ DebugLibrary/VTK/Imaging E:/ DebugLibrary/VTK/IO E:/ DebugLibrary/VTK/Parallel E:/ DebugLibrary/VTK/Rendering E:/ DebugLibrary/VTK/Utilities E :/ DebugLibrary/VTK/VolumeRendering E:/ DebugLibrary/VTK/Widgets E:/ DebugLibrary/VTK/Wrapping

LIBS * = -LE:/ DebugLibrary/VTKBin/bin/release -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkexttk -tk -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering

4
QT-ITK-VTK-Help

アプリケーションを自分だけで使用するのではなく、顧客のマシンにアプリケーションをデプロイする場合、LIBS+= -Lxxx -lyyyメソッドは問題ではないとしても混乱を招く可能性があることがわかります。

Qtを使用して、Linux、Mac、Windows用のアプリケーションを開発しています。完全なスタンドアロンアプリケーションを出荷しています。したがって、すべての非システムライブラリを展開パッケージに含める必要があります。すべてのOSで同じUSBスティックからアプリケーションを実行できるようにしたいと考えています。プラットフォームの互換性のため、USBスティックはFAT32としてフォーマットする必要がありますが、これは(Linux)シンボリックリンクをサポートしません。

LIBS+= -Lxxx -lyyyイディオムはブラックボックスが多すぎることがわかりました。

  1. リンカによって検出された(静的または動的)ライブラリのファイルパスが正確にはわかりません。これは不便です。私たちのMacリンカーは、使用すべきだと思っていたライブラリとは異なるライブラリを定期的に発見しました。これは、Macリンカーが、要求されたバージョンではなく、独自の(古い、互換性のない)OpenSSLバージョンを見つけて使用したOpenSSLライブラリで数回発生しました。

  2. リンカがライブラリへのシンボリックリンクを使用することはできません。これにより、展開パッケージが破損するためです。

  3. ライブラリのnameから、静的ライブラリと動的ライブラリのどちらをリンクするかを確認したいと思います。

したがって、特定のケースでは、絶対ファイルパスのみを使用し、それらが存在するかどうかを確認します。すべてのシンボリックリンクを削除します。

まず、使用しているオペレーティングシステムを特定し、これをCONFIG変数に入れます。そして、例えばLinux 64ビットの場合:

linux64 {
    LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
    !exists($$LIBSSL): error ("Not existing $$LIBSSL")
    LIBS+= $$LIBSSL
    LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
    !exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
    LIBS+= $$LIBCRYPTO
}

ファイルパスがわかっているため、すべての依存関係を展開パッケージにコピーできます。

3
adlag

完全を期すために、依存ライブラリ(コードで直接参照されていない場合がありますが、使用するライブラリが必要な場合があります)を探すLIBRARY PATHのみを追加することもできます。

比較のために、これはLIBPATH環境の機能に対応しますが、Qt Creatorでのその種類は不明瞭であり、十分に文書化されていません。

私がこれを回避した方法は次のとおりです:

LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"

基本的に、実際のライブラリ名を指定しない場合、依存ライブラリを検索する場所へのパスが追加されます。構文の違いはわずかですが、これは依存ライブラリを探す場所をPATHだけに指定するのに非常に便利です。すべてのライブラリが特定のフォルダーにあることがわかっているライブラリに各パスを指定すると、Qt Creatorがそれらを取得するのが面倒です。

1
zar

.pro:LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

.h/.cpp内:#pragma comment(lib,"user32.lib")

#pragma comment(lib,"psapi.lib")
0
Dnyaneshwar