在MacOSX构建库上的Qt Creator或qmake为“.so”而不是dylib

时间:2012-10-19 15:39:41

标签: c++ macos qt qt-creator qmake

我需要在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

2 个答案:

答案 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_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)。

答案 1 :(得分:0)

您可能需要在捆绑后放置-dynamiclibs行...对我有效。

在这里找到:

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