【问题标题】:Interfacing C and Python using swig使用 swig 连接 C 和 Python
【发布时间】:2017-01-17 21:01:02
【问题描述】:

使用在线教程:http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf

我正在尝试重新使用可用的示例,但我遇到了以下错误:

swig:无法执行二进制文件

example.c

/* example.c */
double Foo = 7.5;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}

例子.i

// example.i
%module example
%{
#include "headers.h"
%}
int fact(int n);
double Foo;
#define SPAM 42

错误:

$swig -python example.i
swig: cannot execute binary file

有什么建议吗?我怎样才能克服这个错误以生成 example_wrap.c 文件?

chmod +x example.i
$file example.i
example.i: ASCII C++ program text

【问题讨论】:

  • 我认为错误是关于 swig 而不是 example.i。你试过which swig然后ls -al(检查exec权限)和file输出吗?尝试运行swig --help,或按完整路径运行。
  • 我确实有 exec 权限。文件 swig 返回:swig:ELF 32 位 MSB 可执行文件,SPARC,版本 1 (SYSV),动态链接(使用共享库),未剥离。 $swig --help -bash: /auto/ses/bin/swig: 无法执行二进制文件
  • 输出表明您的 swig 二进制文件是为 32 位 SPARC 系统构建的。如果您不是在 32 位 SPARC 上运行,则需要更合适的 swig 二进制文件。
  • 注意:它也应该适用于 64 位 SPARC。但我怀疑您是在 Solaris SPARC 上运行的。您可能在 Intelx86x64)架构上运行(不知道 Ux / Linux 风味),这就是您应该拥有/运行的 swig。顺便说一句:你是如何安装 swig 的?您使用的是什么操作系统 (uname -a)?

标签: python c executable swig binaryfiles


【解决方案1】:

您正在学习 1998 年的教程,并尝试为 sparc 处理器执行二进制文件。这里有一些非常复古的东西。您可能正在尝试从某人试图记录他 15 年前所做的事情的档案中重新创建事物。

帮自己一个忙,使用当前版本的 swig 和 python,并从当前文档 http://www.swig.org/Doc3.0/Python.html#Python 中学习。 Swig 已经看到了重大改进,同时 python 也发生了重大变化。那时 c 已经很完美了:-)。如果你有想要从 python 中使用的 C 代码,请使用当前版本的 swig 和 python,它会工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多