Qt Creator или qmake для библиотеки сборки MacOSX как & quot; .so & quot; не дилиб

Мне нужно собрать плагин / библиотеку как .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

3

Решение

Суффикс «.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).

3

Другие решения

вам может понадобиться поставить строку -dynamiclibs после пакета … у меня работает.

нашел здесь:

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

0

По вопросам рекламы [email protected]