编译并在Xcode的Mac连接C扩展为Python(Compiling and linking C

2019-07-03 17:58发布

我试图编译在Mac的一个简单的C扩展与Python的使用,以及所有在命令行中运行良好。 代码和gcc命令的作品介绍如下。 现在我想建立在Xcode 4.5(Mac的OS10.8)相同的分机,我尝试了两种dylib或静态库中的多个目标的设置,但我总是无法在Python加载显示错误文件:

./myModule.so: unknown file type, first eight bytes: 0x21 0x3C 0x61 0x72 0x63 0x68 0x3E 0x0A

我的最终目标是要在Xcode中创建一个工作区与C / C ++扩展的源代码,并有一个调用它在Xcode python脚本。 所以,如果我需要调试C / C ++的扩展我的XCode调试功能。 我知道的XCode没有调试到Python脚本,但它可以运行它,对吗?

gcc -shared -arch i386 -arch x86_64 -L/usr/lib/python2.7 -framework python -I/usr/include/python2.7 -o myModule.so myModule.c -v

#include <Python.h>

/*
 * Function to be called from Python
 */
static PyObject* py_myFunction(PyObject* self, PyObject* args)
{
    char *s = "Hello from C!";
    return Py_BuildValue("s", s);
}   

/*
 * Another function to be called from Python
 */
static PyObject* py_myOtherFunction(PyObject* self, PyObject* args)
{
    double x, y;
    PyArg_ParseTuple(args, "dd", &x, &y);
    return Py_BuildValue("d", x*y);
}

/*
 * Bind Python function names to our C functions
 */
static PyMethodDef myModule_methods[] = {
    {"myFunction", py_myFunction, METH_VARARGS},
    {"myOtherFunction", py_myOtherFunction, METH_VARARGS},
    {NULL, NULL}
};

/*
 * Python calls this to let us initialize our module
 */
void initmyModule()
{
    (void) Py_InitModule("myModule", myModule_methods);
}

Answer 1:

这家伙似乎有同样的问题 。

我已经想通了这个问题。 即使我在Xcode改变了设置指定的输出类型“动态库”或“捆绑”,Xcode中被忽略的设置。 开始一个新的BSD动态库项目解决了我所看到的问题。 谢谢您的帮助!



Answer 2:

我已经使用setuptools的,virtualenv中,单元测试和GDB的调试器曾在XCode的4.6成功调试单元测试的C扩展。

我用virtualenvwrapper创建为项目的virtualenv,然后设置〜/ .virtualenvs / MODULE_NAME /斌/ Python作为可执行文件进行调试。

唯一的参数传递给在运行配置中的virtualenv Python解释器是路径到您的test.py.

然后我设置GDB,而不是无作为调试器会自动启动它。

最后一步是通过您的测试目标的外部构建工具配置窗格“的setup.py安装”作为参数传递给您的构建工具(〜/ .virtualenvs / MODULE_NAME /斌/ Python)的。 该virtualenv中为您提供了安装共享对象的C扩展到测试脚本Python解释器的库路径没有实际将其安装到全球站点包为您的主机相当简单的方式。

有了这个设置,我可以打电话从python脚本扩展代码(终极目标),并使用Xcode的GUI调试支持还是调试C代码。

如果我没有描述这显然请让我知道,我给大家介绍一个示例项目。



文章来源: Compiling and linking C extension for Python in Xcode for Mac