link python的C扩展静态库如何?

How to link python's static library for C extensions?

我正在尝试为 python 编写一个 C++ 扩展,其中涉及 Python C API。根据我以前使用 Visual Studio 的经验,我只需要包含 python 的头文件和 link python 的静态库,一切都会正常进行。

但是我现在无法在 OS X Mavericks 上执行此操作。我从 python.org 安装了一个单独的 Python 3.4.2,并在我的 Cmake 配置中添加了一个包含条目:
include_directories("/Library/Frameworks/Python.framework/Versions/3.4/Headers")

然后我不知道如何继续静态库部分。在 Windows 上,它们存储在 %python_root%/libs 中,您可以在那里找到 .lib 文件。但是在 OS X 上我找不到放置 .a 静态库的目录。

我尝试了几种解决方案,例如将 python-config --lib 的结果附加到编译选项和 set(CMAKE_BUILD_TYPE Release),但它们都以以下错误结束:

Undefined symbols for architecture x86_64:
    "_PyLong_FromLong", referenced from:
        test() in Main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我也试过distutils,但它似乎也没有正常工作:(

您收到一个 linker 错误,该库尚未添加到您的 link 选项中。

在我的系统OSX 10.8.5 上,静态库在下面的目录中: 您需要将该目录添加到您的 cmake 库路径,并添加 python 库本身。 (在 GCC 中,您使用 -L 和 -l 选项)。

Directory: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/

file: libpython2.7.a