MacOS X - 编译插件

时间:2014-08-30 01:57:32

标签: c++ macos qt clang qmake

我的应用程序可以加载插件。插件可以使用主可执行文件中的符号。

用Qt用C ++编写。我正在使用qmake构建它。

在Linux下有一个弱链接,它允许我的插件被编译和链接而不满足所有符号依赖性(无论如何它将由加载应用程序在运行时提供)。

Windows要求满足所有符号。我设法在-Wl,--export-all-symbols,--out-implib,libMyApp.a的帮助下使用mingw32执行此操作,该链接生成链接插件时链接器使用的可执行文件中的符号表。

现在我遇到了MacOS X的问题。我不知道如何处理它。我在Apple的帮助here找到了我应该编译我的插件而不是-dynamiclib,而是我应该使用-bundle -bundle_loader MyApp。问题是qmake强制-dynamiclib并且我不知道如何禁用它。我也不知道使用这个“捆绑”选项是否有助于解决我的问题。

使用qmake构建此类插件的正确方法是什么?

EDIT / UPDATE: 我在QtCreator中使用qmake。编译-dynamiclib时,qmake会自动提供(并强制)TEMPLATE = lib。向编译器提供-dynamiclib时,它表示我无法将-bundle_loader-dynamiclib一起使用。该消息表明它是被禁止的。因此,我正在寻找一种方法来删除-dynamiclib

是的,我已阅读qmake手册。不是“逐字逐句”,但一般我在那里寻找我的问题,没有运气。

我使用Qt / qmake 5.3.1,QtCreator与Qt包(3.1.2)一起发货。

1 个答案:

答案 0 :(得分:3)

来自here

  

使用lib模板时,可以将以下选项添加到CONFIG变量以确定构建的库的类型:

插件 - 该库是一个插件;这也启用了dll选项。

因此,请尝试添加到.pro文件中

macx:{
    CONFIG += plugin
    QMAKE_LFLAGS_SHLIB  -= -dynamiclib
    QMAKE_LFLAGS_PLUGIN -= -dynamiclib
    QMAKE_LFLAGS_PLUGIN += -bundle
}

同样,您可以控制项目的编译标记。

可以找到有关qmake变量的其他信息here