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


112

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

回答:


216

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

LIBS += -L/path/to -lpsapi

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

libファイルをプロジェクトディレクトリに保存する場合は、次のように$$_PRO_FILE_PWD_変数を使用してそれらを参照できます。

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

2
ライブラリ変数として環境変数を指定することはできますか?同じ場所にすべてのライブラリがインストールされていない可能性のある複数の人がプロジェクトを開発している場合、ハードコードされたパス名を.proファイルに書き込むと問題が発生するので、私は尋ねています。
2015年

これは私にとってはうまくいきましたが、でvsプロジェクトを生成するとqmake -tp vc、プロジェクトのlibs名が見つかりませんAdditional Dependenciesが、vsプロジェクトはうまく動作します。それAdditional Dependenciesはvs に追加する他の方法があることを意味しますか?
夏の日

1
組み込みのWindowsライブラリのパスを指定する必要はないと思います。.proファイルのwin32セクションには、次のような行がありますLIBS += -lGdi32
Dan Korn

1
@DanKornが述べたように、組み込みのWindowsライブラリの場合、パスを指定する必要はありません(また、指定するべきではありません)。
バー

ライブラリを追加するGUIを作成できないのはなぜですか。
GeneCode

24

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

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

1
足りない質問で申し訳ありませんが、psapiライブラリはすでに事前に構築されている必要がありますか、それともQtCreatorがそれを構築しますか?
Dfr

11

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

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


Qt(Creator)の最新バージョンでは、ディレクトリ区切り文字として常に(単一の)スラッシュが必要です。唯一の例外は、Windowsで「system」コマンドを使用する場合です。次に、エスケープされたバックスラッシュ、つまり2つのバックスラッシュをシステムに供給する必要があります。すべてのフォワードスラッシュを2つのバックスラッシュに置き換えるには、次のようにします。WINDIR = $$DIRWINDIR ~=s,/,\\,g
adlag

6

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


4

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

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 -lvtegk-lvteglibvlvkklibvkkkklvlvkkvlvkklvlvkk -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering


3

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

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

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

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

  2. リンカがライブラリへのシンボリックリンクを使用することは許されません。これはデプロイメントパッケージを破壊するためです。

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

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

まず、使用しているオペレーティングシステムを確認し、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
}

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


1

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

比較すると、これはLIBPATH環境の動作に対応しますが、Qt Creatorではその種のあいまいであり、十分に文書化されていません。

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

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

基本的に、実際のライブラリ名を指定しない場合は、依存ライブラリを検索する場所へのパスが追加されます。構文の違いは小さいですが、これは依存ライブラリを探す場所にPATHだけを提供するのに非常に役立ちます。すべてのパスが特定のフォルダーにあり、Qt Creatorがそれらを取得することがわかっている場合、各パスに個別のライブラリを提供するのは、ときどき苦痛です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.