【问题标题】:Copying precompiled libraries to build directory or adding them to PATH in a QBS project将预编译的库复制到构建目录或将它们添加到 QBS 项目中的 PATH
【发布时间】:2016-09-13 09:47:23
【问题描述】:

我有一个在我的 Qt 应用程序中使用的第三方预编译库 (.lib+.dll)。

在常规 (qmake) QtCreator 项目中,我的 .pro 文件中有以下几行:

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

“项目”选项卡 -> 运行 ->“将构建库搜索路径添加到 PATH”中还有一个选项,默认为开启。它确保将LIBS路径添加到系统PATH中,以便可以找到dll。

但是,我在 QBS 中找不到等价物。我有以下 qbs 文件,然后通过 Depends 将其包含并添加到我的 CppApplication 文件中:

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 并崩溃。 是否可以在运行时将 cpp.libraryPaths 添加到系统 PATH 中?

另一种选择是将 DLL 文件复制到构建目录,但我不知道如何为 QBS 中的预编译库执行此操作。

编辑:我尝试使用记录在 here 的 cpp.systemRunPaths 但它不起作用。

【问题讨论】:

    标签: c++ qt taglib qbs


    【解决方案1】:

    我想出了如何将预构建的 .dll 文件复制到构建目录。

    缺少的是 FileTagger 属性,因为 QBS 似乎不考虑 .dll 文件动态库。

    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 文件中修改或调用该方法。

    【讨论】:

      【解决方案2】:

      艾伦,你是在正确的方式。只需放置

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

      DynamicLibrary {} 块中,在最后一个Group {} 下方。更改 binPath 以指向包含您的共享库的文件夹。这至少适用于 Windows。

      也许您需要将 Depends { name: "cpp" } 移出 Export 块。

      【讨论】:

      • 好像在最新版本的 QBS (1.7.1) 中,“cpp.libraryPaths: [product.libLocation]”也将其添加到系统路径中。应用程序在从 QtCreator 启动时正常运行,无需将 dll 复制到构建目录。
      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多