3

Qt アプリケーションで使用するサード パーティのプリコンパイル済みライブラリ (.lib+.dll) があります。

通常の (qmake) QtCreator プロジェクトでは、.pro ファイルに次の行があります。

LIBS += -L$$PWD/lib/release -ltag
INCLUDEPATH += include/taglib

[プロジェクト] タブ -> [実行] -> [ビルド ライブラリの検索パスを PATH に追加] にもオプションがあり、デフォルトでオンになっています。LIBS パスがシステム PATH に確実に追加されるため、dll を見つけることができます。

ただし、QBS で同等のものを見つけることができません。次の qbs ファイルがあります。これは、CppApplication ファイルの Depends を介してインクルードおよび追加されます。

DynamicLibrary {
    name: "taglib"

    files: "lib/release/tag.dll"

    Export {
        Depends { name: "cpp" }
        cpp.includePaths: [".","include/taglib"]
        cpp.libraryPaths: ["lib/release"]
        cpp.dynamicLibraries: "tag"
    }

    Group {
        name: "taglib"
        fileTagsFilter: ["dynamicLibrary"]
        qbs.install: true
    }

}

リンカーはパスしますが、アプリケーションは実行時に DLL を見つけることができず、クラッシュします。実行時にシステム PATH に cpp.libraryPaths を追加することは可能ですか?

別のオプションは、DLL ファイルをビルド ディレクトリにコピーすることですが、QBS でプリコンパイルされたライブラリに対してそれを行う方法がわかりません。

編集:ここに記載されている cpp.systemRunPaths を使用しようとしましたが、機能しません。

4

2 に答える 2

2

ビルド済みの.dllファイルをビルドディレクトリにコピーする方法を見つけました。

QBS は .dll ファイルの動的ライブラリを考慮していないように見えるため、欠落していたのは FileTagger プロパティでした。

FileTagger {
    patterns: ["*.dll"]
    fileTags: ["dynamicLibrary"]
}

問題は、実行時に cpp.libraryPaths をシステム PATH に追加する方法についてです。core.qbs で次のメソッドを見つけました。

setupRunEnvironment: {
    var env;
    if (qbs.targetOS.contains('windows')) {
        env = new ModUtils.EnvironmentVariable("PATH", qbs.pathListSeparator, true);
        env.append(binPath);
        env.set();
    }
    ...
}

QBS ファイルでそのメソッドを変更または呼び出す方法がわかりません。

于 2016-09-13T10:26:25.873 に答える