Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加载模块时出错。/exp.so未定义符号_Python_Swig - Fatal编程技术网

Python 加载模块时出错。/exp.so未定义符号

Python 加载模块时出错。/exp.so未定义符号,python,swig,Python,Swig,我试图将c代码包装成可以从python调用的代码 代码: #包括“stdio.h” #包括“stdlib.h” #包括“time.h” #包括“math.h” int givernd(int krp1,int krp2) { 国际贸易; int inp1=krp1; int inp2=krp2; 时间到了; 如果(inp1>inp2) {printf(“错误”); 出口(0); } 如果((inp1)=(inp2-1)) {printf(“错误”); 出口(0); } srand(时间(&BRE

我试图将c代码包装成可以从python调用的代码

代码:

#包括“stdio.h”
#包括“stdlib.h”
#包括“time.h”
#包括“math.h”
int givernd(int krp1,int krp2)
{
国际贸易;
int inp1=krp1;
int inp2=krp2;
时间到了;
如果(inp1>inp2)
{printf(“错误”);
出口(0);
}
如果((inp1)=(inp2-1))
{printf(“错误”);
出口(0);
}
srand(时间(&BREAK));
trye=rand()%krp2;
如果(trye>>立即导入1
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:动态模块未定义init函数(initnow1)
试验2:

$swig-pythonnow1.i
$gcc-fpic-I/usr/include/python2.7-c now 1_wrap.c
$gcc-shared now1_wrap.o-o now1.so
$python
Python 2.7.3(默认值,2015年6月22日,19:43:34)
[GCC 4.6.3]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>立即导入1
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
导入错误:./now1.so:未定义符号:givernd
>>> 
我做错了什么


我想知道我是否需要添加一个测试函数作为复制main的起点,但是swig手册说它不是必需的。

您还没有说第一个文件是什么,它包含您对
givernd
的定义,但是假设它被称为givernd.c,您需要编译并链接它以及SWIG生成的包装,例如:

$swig-pythonnow1.i
$gcc-c-fPIC now1_wrap.c-I/usr/include/python2.7-o now1_wrap.o
$gcc-c-fPIC givernd.c-I/usr/include/python2.7-o givernd.o
$gcc-shared-fpic now1\u wrap.o givernd.o-o now1\u wrap.so-lc

(注意:您对gcc的呼叫也缺少-o)

谢谢。教程很差,我也愚蠢地没有添加“-o”。再次感谢。