回答:
これを行う適切な方法は次のとおりです。
LIBS += -L/path/to -lpsapi
これにより、Qtでサポートされているすべてのプラットフォームで動作します。アイデアは、ディレクトリをライブラリ名から分離する必要があるということです(拡張子なしで、「lib」接頭辞なし)。もちろん、Windows固有のlibを含める場合、これは実際には問題になりません。
libファイルをプロジェクトディレクトリに保存する場合は、次のように$$_PRO_FILE_PWD_
変数を使用してそれらを参照できます。
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
、プロジェクトのlibs名が見つかりませんAdditional Dependencies
が、vsプロジェクトはうまく動作します。それAdditional Dependencies
はvs に追加する他の方法があることを意味しますか?
LIBS += -lGdi32
。
LIBS + = C:\ Program Files \ OpenCV \ lib
プログラムファイルで空白を使用しているため、機能しません。この場合、引用符を追加する必要があるため、結果は次のようになります:LIBS + = "C:\ Program Files \ OpenCV \ lib"。ライブラリを空白以外の場所に配置することをお勧めします;-)
WINDIR = $$DIR
、WINDIR ~=s,/,\\,g
あなたが意味するエラーは、追加のインクルードパスがないためです。INCLUDEPATH + = C:\ path \ to \ include \ files \で追加してみてください。よろしく。
また、複数のライブラリファイルを追加するには、次のように記述します。
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
自分のアプリケーションだけを使用するのではなく、顧客のマシンにアプリケーションを配備したい場合、このLIBS+= -Lxxx -lyyy
方法は問題ではないとしても混乱を招く可能性があることがわかります。
Qtを使用してLinux、Mac、Windows用のアプリケーションを開発しています。完全なスタンドアロンアプリケーションを出荷します。そのため、すべての非システムライブラリを展開パッケージに含める必要があります。すべてのOSで同じUSBスティックからアプリケーションを実行できるようにしてください。プラットフォームの互換性のため、USBスティックはFAT32としてフォーマットする必要があります。これは(Linux)シンボリックリンクをサポートしていません。
LIBS+= -Lxxx -lyyy
イディオムがブラックボックスを使いすぎていることがわかりました。
リンカーが見つけた(静的または動的)ライブラリのファイルパスが正確にはわかりません。これは不便です。Macリンカーは、使用すべきだと思ったライブラリとは異なるlibを定期的に見つけました。これは、Macリンカーが要求されたバージョンではなく、独自の-古い、互換性のない-OpenSSLバージョンを見つけて使用したOpenSSLライブラリで数回発生しました。
リンカがライブラリへのシンボリックリンクを使用することは許されません。これはデプロイメントパッケージを破壊するためです。
ライブラリの名前から、静的ライブラリと動的ライブラリのどちらをリンクするかを確認したいと考えています。
したがって、特定のケースでは、絶対ファイルパスのみを使用して、それらが存在するかどうかを確認します。すべてのシンボリックリンクを削除します。
まず、使用しているオペレーティングシステムを確認し、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
}
ファイルパスがわかっているため、すべての依存関係を展開パッケージにコピーできます。
完全を期すために、依存ライブラリを探すLIBRARY PATHだけを追加することもできます(コードで直接参照されていない可能性がありますが、使用するライブラリが必要とする場合があります)。
比較すると、これはLIBPATH環境の動作に対応しますが、Qt Creatorではその種のあいまいであり、十分に文書化されていません。
私がこれを回避した方法は次のとおりです:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
基本的に、実際のライブラリ名を指定しない場合は、依存ライブラリを検索する場所へのパスが追加されます。構文の違いは小さいですが、これは依存ライブラリを探す場所にPATHだけを提供するのに非常に役立ちます。すべてのパスが特定のフォルダーにあり、Qt Creatorがそれらを取得することがわかっている場合、各パスに個別のライブラリを提供するのは、ときどき苦痛です。
.proで: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
.h / .cpp内: #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")