121

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

4

8 に答える 8

221

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

LIBS += -L/path/to -lpsapi

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

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

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
于 2009-04-25T14:22:01.900 に答える
25

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

win32:LIBS += path/to/Psapi.lib
于 2009-04-05T07:37:43.797 に答える
12

ライブラリ += C:\Program Files\OpenCV\lib

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

于 2009-11-19T11:11:31.927 に答える
7

あなたが意味するエラーは、追加のインクルードパスが欠落しているためです。次のように追加してみてください: INCLUDEPATH += C:\path\to\include\files\ 動作することを願っています。よろしく。

于 2009-04-21T16:27:45.810 に答える
5

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

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 -lvtkNetCDF -lvtktexoII -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering

于 2012-12-26T10:30:13.410 に答える
5

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

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

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

  1. リンカーによって検出された (静的または動的) ライブラリのファイルパスが正確にはわかりません。これは不便です。私たちの Mac リンカは、私たちが使用すべきだと思っていたものとは異なるライブラリを定期的に見つけました。これは、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
}

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

于 2015-08-19T21:26:39.200 に答える