Mavericks: скомпилируйте интерпретатор Python в статическую библиотеку

Я хочу встроить интерпретатор Python 3.3 в приложение Cocoa Mac OS 10.9, чтобы добавить некоторые функции Python. Из того, что я прочитал из другого вопроса и ответа StackOverflow, было бы лучше создать статическую библиотеку (ссылки в нижнем колонтитуле), чем динамическую библиотеку.

Вот что я пытался создать статическую библиотеку (файл .a) из интерпретатора Python:

  1. Я скачал исходный код Python 3.3 (CPython) с здесь.
  2. Я добавил *static* в файл Modules/Setup.dist
  3. I've entered the following to compile the source in the Terminal:
    • ./configure LDFLAGS="-static -static-libgcc" CPPFLAGS="-static"

В результате я получаю следующее:

checking build system type... x86_64-apple-darwin13.1.0
checking host system type... x86_64-apple-darwin13.1.0
checking for --enable-universalsdk... no
checking for --with-universal-archs... 32-bit
checking MACHDEP... darwin
checking for --without-gcc... no
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/Path/To/My/Source/Python-3.3.4':
configure: error: C compiler cannot create executables
See `config.log' for more details

Насколько я понимаю, gcc фактически заменен Apple LLVM версии 5.0 (clang-500.2.79) (на основе LLVM 3.3svn) в Mavericks.

Кроме того, я нашел следующее в config.log...

configure:3914: checking whether the C compiler works
configure:3936: clang  -static  conftest.c  >&5
ld: library not found for -lcrt0.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Вопрос. Как мне скомпилировать Python 3.3 с помощью Apple LLVM, чтобы у меня была статическая библиотека, такая как libpython3.3.a?



person Alerty    schedule 08.03.2014    source источник
comment
Что вы имеете в виду под встраиванием? Вы имеете в виду, что хотите иметь пакет приложений на основе Python с использованием Python 3.3? Или вы имеете в виду, что хотите иметь пакет приложений Obj-C (или другого языка, отличного от Python), который включает в себя интерпретатор Python?   -  person Ned Deily    schedule 08.03.2014
comment
Я имею в виду, что у меня есть пакет приложений Objective-C Cocoa, и я хочу встроить интерпретатор Python, чтобы иметь в нем некоторые функции Python.   -  person Alerty    schedule 09.03.2014
comment
Разве это необычно?   -  person Alerty    schedule 09.03.2014
comment
Не обязательно. В первом случае стандартный подход заключается в использовании py2app для создания пакета приложений на основе Python. Во втором случае, я думаю, вы столкнулись с проблемами, пытаясь использовать -static. Взгляните на содержимое config.log и прочитайте man ld описание -static. Вы, вероятно, не хотите использовать его в OS X.   -  person Ned Deily    schedule 09.03.2014
comment
Я нашел это в config.log... ld: библиотека не найдена для -lcrt0.o   -  person Alerty    schedule 09.03.2014
comment
Правильно. Apple намеренно не предоставляет статическую версию библиотеки времени выполнения C. См., например: stackoverflow.com/questions /5259249/   -  person Ned Deily    schedule 09.03.2014


Ответы (2)


Я думаю, что по умолчанию создается статическая библиотека на платформах на базе Unix, включая OSX. То есть просто настроить, сделать, сделать установить. Это сработало для меня и собрало libpython3.4m.a. Но вы можете подумать об использовании --prefix и прочитать об установке нескольких версий Python на OSX.

Тема, на которую вы ссылаетесь, устарела?

Встраивание не так уж и странно, иначе документы и книги Python не обсуждали бы его подробно.

person bootchk    schedule 21.05.2014

Начиная с Python 3.5, нет необходимости использовать LDFLAGS или CPPFLAGS во время настройки.

С флагом configure --disable-shared будет создана статическая библиотека.

С флагом configure --enable-shared будет создана динамическая библиотека.

В сочетании с --prefix вы можете настроить собственный дистрибутив Python со всеми нужными вам пакетами. У вас может быть как статическая библиотека Python для включения в ваши приложения, так и динамическая библиотека, обеспечивающая правильный запуск интерактивного Python.

person jlaurens    schedule 22.07.2016