gpt4 book ai didi

python - 加载模块时出错./exp.so undefined symbol

转载 作者:行者123 更新时间:2023-12-01 04:02:29 24 4
gpt4 key购买 nike

我正在尝试将 C 代码包装为可从 python 调用。

代码:

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "math.h"
int givernd(int krp1,int krp2)
{
int trye;
int inp1=krp1;
int inp2=krp2;
time_t broke;
if(inp1 > inp2)
{ printf("error");
exit(0);
}
if((inp1)=(inp2-1))
{ printf("error");
exit(0);
}
srand(time(&broke));
trye=rand()%krp2;
if(trye<krp1)
{
return(trye+krp1+1);
}
if(trye==krp1)
{
return(trye+1);
}
return(trye);
}

.i 文件:

/* now1.i */
%module now1
%{
/* Put header files here or function declarations like below */

extern int givernd(int krp1,int krp2);
%}

extern int givernd(int krp1,int krp2);

试验 1:

$ swig -python now1.i
$ gcc -c -fPIC now1_wrap.c -I/usr/include/python2.7
$ gcc -shared -fpic now1_wrap.o -o now1_wrap.so -lc
$ python
Python 2.7.3 (default, Jun 22 2015, 19:43:34)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import now1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initnow1)

试验2:

$ swig -python now1.i
$ gcc -fpic -I/usr/include/python2.7 -c now1_wrap.c
$ gcc -shared now1_wrap.o -o now1.so
$ python
Python 2.7.3 (default, Jun 22 2015, 19:43:34)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import now1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./now1.so: undefined symbol: givernd
>>>

我做错了什么?

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

最佳答案

您还没有说出第一个文件(包含您的 givernd 定义的文件)的名称,但假设它名为 Givernd.c,您需要编译并链接它以及SWIG 生成的包装器,例如:

$ swig -python now1.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_wrap.o givernd.o -o now1_wrap.so -lc

(注意:您对 gcc 的调用也缺少 -o)

关于python - 加载模块时出错./exp.so undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36241927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com