1
私はPythonから呼び出し可能になるようにCコードをラップしようとしています。エラーロードモジュール./exp.so未定義シンボル
コード:
#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マニュアルには必須ではないと書かれています。
thanks.theチュートリアルはかなり貧弱だったと私は愚かに感謝either.again多くのことを "-o" を追加didntの。 – blute