3

我需要在 Mac 上将我的插件/库构建为 .so。这在 Linux 上不需要额外的技巧就可以发生,并且就像一个魅力。

我需要向我的 .pro 文件添加哪些额外选项?

CONFIG += debug
QT += xml
TEMPLATE = lib
TARGET = mylib
DEPENDPATH += .
macx:INCLUDEPATH += ../../../Test \
  /usr/local/include/

macx:LIBS += -L../../../Test/lib

DEFINES += CORE_EXPORT=
DEFINES += GUI_EXPORT=

HEADERS += test.h testGui.h
FORMS += testGui.ui
SOURCES += test.cpp testGui.cpp
RESOURCES += test.qrc
4

2 回答 2

3

“.so”后缀在 OS X 上没有任何意义。在像 Linux 这样的 ELF 平台上,“*.so”文件是一个共享库。在 OS X 上,共享库具有“.dylib”扩展名。在 Linux 上,插件被实现为共享库 (*.so),因为您可以在使用完它们后再次卸载它们。在 OS X 上,无法卸载共享库。这使得它们不适合插件。

在 OS X 上,您使用包而不是共享库来实现插件。上次我看的时候,qmake 不直接支持这个。但是您可以修改链接器标志以构建捆绑包。默认情况下,qmake 使用“-dynamiclib”链接器标志,它构建 *.dylib。相反,您应该使用构建捆绑包的“-bundle”标志。你可以试试这个:

CONFIG += plugin
QMAKE_LFLAGS_PLUGIN -= -dynamiclib
QMAKE_LFLAGS_PLUGIN += -bundle

捆绑包的文件扩展名未标准化。你可以使用任何你想要的东西(.so、.dylib、.plugin、.donald_duck,...)Apple 推荐“.bundle”,但不强制执行。要控制创建包的文件名,您可以设置QMAKE_EXTENSION_SHLIBQMAKE_PREFIX_SHLIB。例如,要获取mylib.bundle,设置:

QMAKE_EXTENSION_SHLIB = bundle
QMAKE_PREFIX_SHLIB =

相反,如果您想获取libmylib.so,只需设置:

QMAKE_PREFIX_SHLIB = so

顾名思义,QMAKE_EXTENSION_SHLIB包含文件扩展名(不带.),并QMAKE_PREFIX_SHLIB包含文件前缀(默认为lib)。

于 2012-10-19T17:55:30.807 回答
0

您可能需要将 -dynamiclibs 行放在 bundle... 之后对我有用。

在这里找到:

http://jonmacey.blogspot.com/2012/03/using-maya-api-with-qt-creator.html

于 2013-01-25T13:50:43.530 回答