MacOS X-编译一个插件

MacOS X - compiling a plugin

本文关键字:一个 插件 编译 MacOS      更新时间:2023-10-16

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

它是用C++和Qt编写的。我正在使用qmake来构建它。

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

Windows要求满足所有符号。在-Wl,--export-all-symbols,--out-implib,libMyApp.a的帮助下,我成功地使用了mingw32,它从可执行文件中生成了一个符号表,供链接器在链接插件时使用。

现在我在MacOS X上遇到了一个问题。我不知道如何处理它。我在苹果的帮助下发现,我应该使用-bundle -bundle_loader MyApp编译插件,而不是使用-dynamiclib。问题是qmake强制-dynamiclib,我不知道如何禁用它。我也不知道使用这个"捆绑包"选项是否有助于解决我的问题。

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

编辑/更新:我在QtCreator中使用qmake。在编译TEMPLATE = lib时,qmake会自动提供(并强制)-dynamiclib。当-dynamiclib提供给编译器时,它说我不能将-bundle_loader-dynamiclib一起使用。信息表明这是被禁止的。因此,我正在寻找一种删除-dynamiclib的方法。

是的,我已经阅读了qmake手册。不是"逐字逐句",但总的来说,我一直在那里寻找我的问题,但运气不佳。

我使用Qt/qmake 5.3.1,Qt呼吸机与Qt包装(3.1.2)一起装运。

从这里开始

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

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

所以,尝试添加到你的.pro文件

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

类似地,您可以控制项目的编译标志。

关于qmake变量的其他信息可以在这里找到。