如何使用调用另一个.dylib的外部.dylib部署应用程序?

兰德林·德尔库克(Landelin Delcoucq)

我已经构建了一个应用程序,该应用程序加载了一个自制的.dylib,而该.dylib必须调用另一个.dylib。

我在OS X上使用Qt。当我进入Qt Creator时,我可以进行调试/发布,并且可以正常工作。当我单击.app和应用程序位于.app / Contents / Frameworks中的所有.dylib时,它也起作用。我的问题是部署。当我运行macdeployqt时,所有工作都会生成一个.dmg,但是当我启动此.dmg时,会发生错误。

此错误是逻辑上的,因为由主.dylib调用的.dylib不在.app / Contents / Frameworks文件夹中。如果我在此文件夹中添加它,我不知道如何添加它失败。这也是合乎逻辑的,因为该应用程序不调用第二个.dylib,而是主dylib。没有应用程序文件夹,所以...

库巴并没有忘记莫妮卡

使用该macdeployqt工具之前,必须将所需的库复制到应用程序捆绑包中您可以通过添加主要目标所依赖的自定义目标,从应用程序本身的项目文件中执行复制这些目标将是dylib的副本,您将从构建目录中的其他位置复制它们。

通常,您将有一个顶级子目录项目来构建库和应用程序,例如:

+--- lib-dylib-32920629
    +--- lib-dylib-32920629.pro
    +--- lib1
    |   +--- lib1.pro
    |   +--- lib1.cpp
    |   \--- lib1.h
    \--- main
        +--- main.pro
        \--- main.cpp

从以下位置下载此项目:https : //github.com/KubaO/stackoverflown/tree/master/questions/lib-dylib-39206929

lib-dylib-39206929.pro

TEMPLATE = subdirs
SUBDIRS += lib1 main
main.depends += lib1

lib1 / lib1.pro

QT = core
CONFIG += c++11
TEMPLATE = lib
HEADERS += lib1.h
SOURCES += lib1.cpp

lib1 / lib1.h

#ifndef LIB1_H
#define LIB1_H

#include <QObject>

class Lib1 {
public:
    QString text();
};

#endif

lib1 / lib1.cpp

#include "lib1.h"

QString Lib1::text() {
    return QStringLiteral("Hello from Lib1");
}

main / main.pro

deployLib可以使用自定义函数将库部署到应用程序捆绑包中:

QT = widgets
CONFIG += c++11
TEMPLATE = app
SOURCES += main.cpp
LIBS += -L../lib1 -llib1
INCLUDEPATH += ..
DEPENDPATH += ..

defineReplace(libVersions) {
   # libVersions(1,2,3) - returns .1.2.3. .1.2. .1. .
   versions=.$${1}.$${2}.$${3}. .$${1}.$${2}. .$${1}. .
   return($$versions)
}
defineReplace(dylibs) {
   # dylibs(base,1,2,3) - returns libbase.1.2.3.dylib libbase.1.2.dylib ... libbase.dylib
   base = $$1
   versions = $$libVersions("$$2","$$3","$$4")
   libs =
   for (version, versions): libs += lib$${base}$${version}dylib
   return($$libs)
}
defineTest(deployLib) {
   # deployLib(target,target2path,target2,1,2,3)
   #   deploys target2path/libtarget2.1.2.3.dylib,... to the target's application bundle
   target = $$1
   libpath = $$2
   libtarget = $$3
   libs = $$dylibs($$libtarget,$$4,$$5,$$6)
   targetdir = $${target}.app/Contents/MacOS
   mktargetdir = "(test -d $$targetdir/ || mkdir -p $$targetdir/)"
   for (lib, libs) {
      out = $$targetdir/$$lib
      $${lib}.target = $$out
      $${lib}.commands = $$mktargetdir
      $${lib}.commands += "&& $$QMAKE_COPY_FILE $$libpath/$$libtarget/$$lib $$out"
      export($${lib}.target)
      export($${lib}.commands)
      QMAKE_EXTRA_TARGETS += $$lib
      PRE_TARGETDEPS += $$out
   }
   export(QMAKE_EXTRA_TARGETS)
   export(PRE_TARGETDEPS)
   return(true)
}

macx {
   deployLib(main, .., lib1, 1, 0, 0)
}

main / main.cpp

#include "lib1/lib1.h"
#include <QtWidgets>

int main(int argc, char ** argv) {
    QApplication app{argc, argv};
    Lib1 lib1;
    QLabel label{lib1.text()};
    label.setMinimumSize(200, 200);
    label.setFont(QFont{"Helvetica", 20});
    label.show();
    return app.exec();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从另一个应用程序启动外部“不可见”应用程序

来自分类Dev

如何从VB.NET中的另一个应用程序调用clickonce部署的应用程序?

来自分类Dev

如何在Qt的Mac应用程序捆绑包中捆绑dylib?

来自分类Dev

如何从另一个本地调用一个功能应用程序?

来自分类Dev

你如何从一个应用程序调用另一个视图

来自分类Dev

使用CodePipeline在另一个AWS账户中部署ElasticBeanstalk应用程序

来自分类Dev

如何从另一个应用程序调用处理程序?

来自分类Dev

libGDX / roboVM:如何修复“本地库libhfscompressor.dylib已在另一个类加载器中加载”?

来自分类Dev

如何从另一个应用程序调用服务?

来自分类Dev

如何从另一个应用程序调用服务?

来自分类Dev

如何使用另一个javascript src调用javascript外部src?

来自分类Dev

从另一个程序运行外部python程序

来自分类Dev

在没有确认活动的情况下从另一个应用程序从外部存储安装apk

来自分类Dev

如何监控另一个应用程序?

来自分类Dev

部署了另一个应用程序后,无法找到CodeDom提供程序

来自分类Dev

如何从另一个应用程序的预构建过程中调用cmd应用程序?

来自分类Dev

如何在我的android应用程序的用户界面中调用另一个android应用程序?

来自分类Dev

如何从PHP调用另一个程序

来自分类Dev

从另一个Flask应用程序调用Flask应用程序的REST API

来自分类Dev

从另一个 Web 应用程序调用 Web 应用程序

来自分类Dev

Fabric8:使用外部Pod部署Java应用程序

来自分类Dev

用于部署使用外部库的应用程序的正确构建选项

来自分类Dev

mvvmcross,如何使用参数从另一个应用程序以编程方式打开另一个应用程序

来自分类Dev

MAC | 从 VirtualBox 机器上的另一个应用程序访问部署在 Docker 上的应用程序

来自分类Dev

使用Symfony中的FOSTRestBundle从另一个应用程序中的另一个类调用方法

来自分类Dev

在一个Nodejs应用程序中从另一个Nodejs应用程序调用API的方法

来自分类Dev

在一个Nodejs应用程序中从另一个Nodejs应用程序调用API的方法

来自分类Dev

在Marionette中从另一个应用程序调用一个应用程序的视图

来自分类Dev

如何从另一个窗口使用我的应用程序资源?

Related 相关文章

  1. 1

    从另一个应用程序启动外部“不可见”应用程序

  2. 2

    如何从VB.NET中的另一个应用程序调用clickonce部署的应用程序?

  3. 3

    如何在Qt的Mac应用程序捆绑包中捆绑dylib?

  4. 4

    如何从另一个本地调用一个功能应用程序?

  5. 5

    你如何从一个应用程序调用另一个视图

  6. 6

    使用CodePipeline在另一个AWS账户中部署ElasticBeanstalk应用程序

  7. 7

    如何从另一个应用程序调用处理程序?

  8. 8

    libGDX / roboVM:如何修复“本地库libhfscompressor.dylib已在另一个类加载器中加载”?

  9. 9

    如何从另一个应用程序调用服务?

  10. 10

    如何从另一个应用程序调用服务?

  11. 11

    如何使用另一个javascript src调用javascript外部src?

  12. 12

    从另一个程序运行外部python程序

  13. 13

    在没有确认活动的情况下从另一个应用程序从外部存储安装apk

  14. 14

    如何监控另一个应用程序?

  15. 15

    部署了另一个应用程序后,无法找到CodeDom提供程序

  16. 16

    如何从另一个应用程序的预构建过程中调用cmd应用程序?

  17. 17

    如何在我的android应用程序的用户界面中调用另一个android应用程序?

  18. 18

    如何从PHP调用另一个程序

  19. 19

    从另一个Flask应用程序调用Flask应用程序的REST API

  20. 20

    从另一个 Web 应用程序调用 Web 应用程序

  21. 21

    Fabric8:使用外部Pod部署Java应用程序

  22. 22

    用于部署使用外部库的应用程序的正确构建选项

  23. 23

    mvvmcross,如何使用参数从另一个应用程序以编程方式打开另一个应用程序

  24. 24

    MAC | 从 VirtualBox 机器上的另一个应用程序访问部署在 Docker 上的应用程序

  25. 25

    使用Symfony中的FOSTRestBundle从另一个应用程序中的另一个类调用方法

  26. 26

    在一个Nodejs应用程序中从另一个Nodejs应用程序调用API的方法

  27. 27

    在一个Nodejs应用程序中从另一个Nodejs应用程序调用API的方法

  28. 28

    在Marionette中从另一个应用程序调用一个应用程序的视图

  29. 29

    如何从另一个窗口使用我的应用程序资源?

热门标签

归档