Mavericks:将 Python 解释器编译成静态库
Posted
技术标签:
【中文标题】Mavericks:将 Python 解释器编译成静态库【英文标题】:Mavericks: Compile Python Interpreter into a static lib 【发布时间】:2014-03-08 19:01:50 【问题描述】:我想将 Python 3.3 解释器嵌入到 Mac OS 10.9 Cocoa 应用程序中以添加一些 Python 功能。根据我从另一个 *** 问答中读到的内容,最好创建一个静态库(页脚中的引用)而不是动态库。
这是我尝试从 Python 解释器创建静态库(.a 文件)的内容:
-
我已经从here 下载了 Python 3.3 (CPython) 源代码。
我在
Modules/Setup.dist
文件中添加了*static*
我已输入以下内容以在终端中编译源代码:
./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 实际上在 Mavericks 中被 Apple LLVM 5.0 版(clang-500.2.79)(基于 LLVM 3.3svn)所取代。
另外,我在 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)
问题:如何使用 Apple LLVM 编译 Python 3.3,这样我就有了一个静态库,例如 libpython3.3。一个?
参考 1: Getting Python to work in Cocoa App 参考 2: Compile the Python interpreter statically?
【问题讨论】:
嵌入是什么意思?你的意思是你想拥有一个使用 Python 3.3 的基于 Python 的应用程序包?或者你的意思是你想要一个在其中嵌入 Python 解释器的 Obj-C(或其他非 Python 语言)应用程序包? 我的意思是我有一个 Objective-C Cocoa 应用程序包,我想嵌入 Python 解释器以在其中包含一些 Python 功能。 想要这样做是不是很不寻常? 不一定。在第一种情况下,标准方法是使用py2app
来生成基于 Python 的应用程序包。对于第二种情况,我认为您在尝试使用-static
时遇到了问题。查看config.log
的内容并阅读-static
的man ld
描述。你可能不想在 OS X 上使用它。
我在 config.log 中找到了这个... ld: library not found for -lcrt0.o
【参考方案1】:
我认为它默认构建一个静态库,在基于 Unix 的平台上,包括 OSX。也就是说,只需简单的配置、制作、制作安装。它对我有用并构建了 libpython3.4m.a。但是您可能会考虑使用 --prefix 并阅读有关在 OSX 上安装多个版本的 Python 的信息。
你引用的线程是旧的?
嵌入并不奇怪,否则Python文档和书籍不会深入讨论它。
【讨论】:
【参考方案2】:从 python 3.5 开始,在配置时无需使用 LDFLAGS 或 CPPFLAGS。
使用 configure --disable-shared 标志,它将构建一个静态库。
使用 configure --enable-shared 标志,它将构建一个动态库。
结合 --prefix,你可以设置你自己的 python 发行版和你想要的所有包。您可以将静态 python 库合并到您的应用程序中,也可以使用动态库让交互式 python 正确启动。
【讨论】:
以上是关于Mavericks:将 Python 解释器编译成静态库的主要内容,如果未能解决你的问题,请参考以下文章