0

问题是在qbs中解决这个问题:

这是一个由 QtCreator 生成的文件。我添加了

cpp.dynamicLibraries:[
   "/usr/lib/qconsoledesigner/libqconsoletoolkit.so"
]

CppApplication {
    Depends { name: "Qt.core" }
    Depends { name: "Qt.network" }

    cpp.cxxLanguageVersion: "c++11"

    cpp.defines: [
        "QT_DEPRECATED_WARNINGS",
    ]
    cpp.dynamicLibraries:[
    "/usr/lib/qconsoledesigner/libqconsoletoolkit.so"
    ]

    consoleApplication: true
    files: "main.cpp"

    Group {     // Properties for the produced executable
        fileTagsFilter: "application"
        qbs.install: true
    }
}

这是 main();

#include <QCoreApplication>
#include "qconsoledesigner/qconsoletoolkit.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QConsoleToolkit ct;

    return a.exec();
}

一切都很好。运行会产生此错误:

/home/.../qtc_Desktop_Qt_5_10_1_GCC_64bit_qt_qt5_Debug/install-root/MyProject: 
error while loading shared libraries: 
libqconsoletoolkit.so: 
cannot open shared object file: 
No such file or directory

在我将该 .so 物理复制到我的安装根目录之前,我知道必须有一个可以设置的 QBS 属性。

我曾尝试在https://doc.qt.io/qbs/qml-qbsmodules-cpp.html中使用各种与路径相关的属性,但我在黑暗中摸索。

谢谢。

4

1 回答 1

0

您可以使用 rpath:https ://doc.qt.io/qbs/qml-qbsmodules-cpp.html#rpaths-prop

对于“本地”使用,或者如果您希望该库出现在您的应用程序安装的任何位置,只需在构建时使用该库所在的目录:

cpp.rpaths: "/usr/lib/qconsoledesigner"

否则,您需要将库与您的应用程序一起安装并使用相对 rpath。目前,qbs 没有前者的便利功能,所以你可以这样写:

property stringList sharedLibsToDeploy: "/usr/lib/qconsoledesigner/libqconsoletoolkit.so"
cpp.dynamicLibraries: sharedLibsToDeploy
Group {
    files: sharedLibsToDeploy
    qbs.install: true
    cpp.rpaths: cpp.rpathOrigin // if lib and app are installed into the same dir; adapt otherwise
}
于 2018-07-30T09:01:55.907 回答