C言語からPythonを埋め込んだ場合に、Py_Initialize()が存在しないエラーが発生する。
始めまして。最近Pythonを始めました。
現在C言語で開発を進めており、一部の処理をPythonで行いたいと考えております。
こちらの記事を参考にして、Pythonを埋め込んでみました。
http://d.hatena.ne.jp/mscp/20090919/1261917834
結果から申し上げますと、Py_Initialize()以下独自の関数が存在しないと
エラーが発生してしまい、コンパイルできない状態です。
Makefileとエラー内容は以下です。
gcc -I/usr/include/python2.6 -L/usr/lib/python2.6 test.c -o test
エラー内容
make: 警告: ファイル `Makefile' の修正時刻が 7.4e+02 秒分未来の時刻です gcc
-I/usr/include/python2.6 -L/usr/lib/python2.6 test.c -o test In file included from /usr/include/python2.6/Python.h:8,
from test.c:7: /usr/include/python2.6/pyconfig.h:1031:1: warning: "_POSIX_C_SOURCE"
redefined In file included from /usr/include/sys/types.h:27,
from test.c:1: /usr/include/features.h:210:1: warning: this is the location of the previous definition
/tmp/ccZzd8yt.o: 関数 `main' 内: test.c:(.text+0x381):
`Py_SetProgramName' に対する定義されていない参照です test.c:(.text+0x386):
`Py_Initialize' に対する定義されていない参照です test.c:(.text+0x392):
`PyImport_ImportModule' に対する定義されていない参照です test.c:(.text+0x3b8):
`PyObject_CallMethod' に対する定義されていない参照です test.c:(.text+0x3de):
`PyArg_Parse' に対する定義されていない参照です test.c:(.text+0x3ef): `Py_Finalize'
に対する定義されていない参照です collect2: ld returned 1 exit status make: ***
[test] エラー 1
おそらくライブラリがうまく貼れていないのではないかと思うのですが、
いまいちやり方がわかりません。
どなたか助言よろしくおねがいします。
◆開発環境
OS:Debian@SQUEEZE
Version:Python2.6
IDE:NetBeans
test.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <termios.h>
#include <unistd.h>
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAIN_C
#include "exitfail.h"
#define SERIAL_BAUNDRATE 115200
#define BUF_SIZE 256
#define MAXITEM 20
#define THRMO 7
#define INDEX_HEADER1 0
#define INDEX_HEADER2 1
#define INDEX_DATASIZE1 2
#define INDEX_DATASIZE2 3
#define INDEX_DATA 4
#define BIT_OFFSET 8
#define HEX_HEADER1 0xA5
#define HEX_HEADER2 0x5A
#define HEX_MSB 0x8000
#define HEX_EOT 0x04
int main(int argc, char *argv[])
{
exitfail_init();
PyObject *pModule, *pTmp;
char *sTmp;
Py_SetProgramName(argv[0]);
Py_Initialize();
pModule = PyImport_ImportModule("script");
pTmp = PyObject_CallMethod(pModule, "func", NULL);
PyArg_Parse(pTmp, "s", &sTmp);
printf("%s\n", sTmp);
Py_Finalize();
return EXIT_SUCCESS;
}