Изменения во встраивании Python Используя Xcode 5.0
Этот документ обсуждает некоторые изменения, необходимые для надлежащего встраивания интерпретатора Python с помощью Xcode 5.0.
Введение
Не только может, новые расширения Python, записанные в C/C ++/Objective-C, быть полученными доступ от Python, но интерпретатора Python, могут также быть встроены в C/C ++/Objective-C программа, так, чтобы программа могла выполнить код Python и модули Python доступа, расширения, и т.д.
Встраивание платформы Python
Документация Python объясняет, как получить необходимый компилятор и флаги компоновщика (хотя в большинстве случаев, только -I, -L и -l флаги действительно необходимы). Это работает на большинство подобных Unix операционных систем, включая OS X.
В частности на OS X, Python упаковывается в пакете платформы, так, чтобы все модули Python, расширения и заголовочные файлы были в одном расположении. Многократные версии Python могут также поддерживаться. Это также означает, что компиляция и соединение могут быть упрощены, когда получено доступ через платформу:
Подобная Unix система:
#include <Python.h>Добавьте a
-Iотметьте к complier с помощью пути к заголовкам.Для соединения мы добавляем a
-L/-lпара опций соединиться против libpython2.x.dylib библиотеки.
Как платформа:
#include <Python/Python.h>Тогда мы перетаскиваем значок Python.framework в боковую панель XCode (или эквивалентно добавьте Python.framework через Двоичный файл Ссылки С Библиотеками в Фазах Сборки).
Поскольку Python является платформой, он также находится в SDK, даже при том, что Python (или любой язык сценариев) испытывает затруднения при нахождении в двух местах. И вследствие долгосрочных и вследствие недавних проблем, было решено удалить Python из SDK. Это не влияет ни на каких обычных пользователей или разработчиков программного обеспечения, не указывающих SDKROOT (или через переменную окружения SDKROOT, -sdk опцию на некоторых инструментах или через -isysroot/-syslibroot опции к компилятору/компоновщику).
Но если Вы будете использовать SDKROOT и/или XCode (который осуществляет SDKROOT), то ярлыки платформы больше не будут работать, таким образом, необходимо будет вернуться к использованию подобных Unix настроек:
1) Замена
#include <Python/Python.h>
с
#include <Python.h>
2) Выполненный (с надлежащим номером версии, не используя 2.7) показанный в Перечислении 1:
Перечисление 1 , Получающее флаги компилятора
% python2.7-config --cflags |
-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch x86_64 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE |
( -I опция дублирована). В XCode вставьте путь (без продвижения -I) в установку Header Search Paths раздела Search Paths Настроек Сборки. Не используя XCode, добавьте -I опция с путем к флагам компилятора.
3) Удалите значок Python.framework из боковой панели XCode, или не используя XCode, удалите “- Python платформы” из флагов компоновщика.
4) Выполненный (с надлежащим номером версии, не используя 2.7) показанный в Перечислении 2:
Перечисление 2 , Получающее флаги компоновщика
% python2.7-config --ldflags |
-L/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config -ldl -framework CoreFoundation -lpython2.7 |
При использовании XCode откройте путь после -L опция в Средстве поиска, и перетаскивает libpython2.7.dylib значок в боковую панель XCode. Подтвердите диалоговое окно, и теперь XCode установлен соединиться против libpython2.7.dylib (при помощи того же -L и -l настройки опции как выше).
Не используя XCode, добавьте -L опция (с путем) и второй -l опция сверху к флагам компоновщика.
История версии документа
| Дата | Примечания |
|---|---|
| 30.01.2014 | Фиксированный недопустимый '-' символ в Перечислении 1. |
| 30.10.2013 | Новый документ, обсуждающий, как встроить язык сценариев Python в Ваше приложение. |