我需要在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
答案 0 :(得分:3)
“.so”后缀在OS X上没有任何意义。在像Linux这样的ELF平台上,“* .so”文件是共享库。在OS X上,共享库具有“.dylib”扩展名。在Linux上,插件是作为共享库(* .so)实现的,因为您可以在完成后再次卸载它们。在OS X上,无法卸载共享库。这使得它们不适合插件。
在OS X上,您使用bundle而不是共享库来实现插件。上次我看,qmake不直接支持这个。但您可以修改链接器标志以构建捆绑包。默认情况下,qmake使用“-dynamiclib”链接器标志,该标志构建* .dylib。相反,您应该使用“-bundle”标志来构建包。你可以试试这个:
CONFIG += plugin
QMAKE_LFLAGS_PLUGIN -= -dynamiclib
QMAKE_LFLAGS_PLUGIN += -bundle
捆绑包的文件扩展名未标准化。你可以使用你想要的任何东西(.so,.dylib,.plugin,.donald_duck,...)Apple建议使用“.bundle”,但不强制执行。要控制创建的包的文件名,您可以设置QMAKE_EXTENSION_SHLIB
和QMAKE_PREFIX_SHLIB
。例如,要获取mylib.bundle
,请设置:
QMAKE_EXTENSION_SHLIB = bundle
QMAKE_PREFIX_SHLIB =
如果您想获得libmylib.so
,只需设置:
QMAKE_PREFIX_SHLIB = so
顾名思义,QMAKE_EXTENSION_SHLIB
包含文件扩展名(不包含.
),QMAKE_PREFIX_SHLIB
包含文件前缀(默认情况下为lib
)。
答案 1 :(得分:0)
您可能需要在捆绑后放置-dynamiclibs行...对我有效。
在这里找到:
http://jonmacey.blogspot.com/2012/03/using-maya-api-with-qt-creator.html