Мне нужно собрать плагин / библиотеку как .so на Mac. Это происходит без лишних хитростей в 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
Суффикс «.so» ничего не значит в OS X. На платформе ELF, такой как Linux, файл «* .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_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
).
вам может понадобиться поставить строку -dynamiclibs после пакета … у меня работает.
нашел здесь:
http://jonmacey.blogspot.com/2012/03/using-maya-api-with-qt-creator.html