単純な C ファイルを使用して python を拡張しようとしています。独自の Python モジュールの作成には成功しましたが、コンパイルしてスタンドアロンの実行可能ファイルとして実行するには、C ファイル自体も必要です。正常にコンパイルできますが、実行しようとすると、「バイナリ ファイルを実行できません: Exec フォーマット エラー」というエラーが表示されます。
これが私の C ソース ファイル (hellomodule.c) です。
#include <Python.h>
void print_hello(const char* name){
printf("Hello %s!\n", name);
}
//Only used by Python
static PyObject*
say_hello(PyObject* self, PyObject* args)
{
const char* name;
if (!PyArg_ParseTuple(args, "s", &name))
return NULL;
//printf("Hello %s!\n", name);
print_hello("World");
Py_RETURN_NONE;
}
//Only used by Python
static PyMethodDef HelloMethods[] =
{
{"say_hello", say_hello, METH_VARARGS, "Greet somebody."},
{NULL, NULL, 0, NULL}
};
//Only used by Python
PyMODINIT_FUNC
inithello(void)
{
(void) Py_InitModule("hello", HelloMethods);
}
int main(){
print_hello("World");
}
次のようにして、エラーや警告なしで「正常に」コンパイルできます。
gcc -I /usr/include/python2.7 -c hellomodule.c -o hellomodule
「hellomodule」ファイルを実行可能にした後、それを実行するとエラーが発生します。
-bash: ./hellomodule: cannot execute binary file: Exec format error
なぜこのようなエラーが発生するのでしょうか?