質問: PyObject_CallMethod(pModule, "func", NULL); PyArg_Parse(pTmp, "s", &sTmp); printf("%s\n", sTmp); Py_Finalize(); return EXIT_SUCCESS; } ```
回答: ``` gcc -I/usr/include/python2.6 -L/usr/lib/python2.6 test.c -o test ``` ライブラリのパスは指定していますが、肝心のライブラリを指定していません。 ``` gcc -I/usr/include/python2.6 -L/usr/lib/python2.6 test.c -o test -lpython2.6 ``` かな?(debianのライブラリ名がどうなっているか知らないので、もし違っていたら/usr/lib/python2.6の中を探してみてください) ただ、python-configやpkg-configというコマンドを使ったほうが、適切なコンパイルオプションを指定できますので、そちらを使うことをおすすめします。 ``` gcc test.c -o test $(python-config --cflags --ldflags) ``` 一応フォローしておくと、上記のコマンドはbash上で実行する場合です。 Makefile内に記述する場合には、「$」マークはマクロと判断されてしまうので、 ``` gcc test.c -o test $$(python-config --cflags --ldflags) ``` というように「$」を重ねるか、 ``` gcc test.c -o test $(shell python-config --cflags --ldflags) ``` というように「shell」マクロを使ってください。 (NetBeansを使った事はないので、もしかしたらNetBeansなりのやり方があるかもしれませんので、あしからず) ### 以下、質問者向けでないひとりごと (linuxmint18で試したら、python-configとpkg-configの出力が違うのだけど、いいんかな?) ``` $ pkg-config --cflags --libs python -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -lpython2.7 $ python-config --cflags --libs -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -lpython2.7 -lpthread -ldl -lutil -lm ``` 長くなりそうなので、こちらでコメントします。 まず、ライブラリのファイル名についてです。 gccのライブラリのファイル名は、通常は「lib*ほげ*.a」になり、これをリンク時に使用する際には「-l*ほげ*」と指定します。 ですので、今回探すのは「libpython2.6.a」(もしくは、「libpython*.a」)です。 とりあえず確認事項ですが。 * debianは32bit版ですか?64bit版ですか? * pythonは、debianのパッケージの物を使っていますか? * 「dpkg-query -L libpython2.6-dev」を実行すると、パッケージのファイル名一覧が表示されます。その中の「libpython2.6.a」を探し、「/usr/lib/python2.6」にあるか確認してください。 もしディレクトリが違っていたら、「-L/usr/lib/python2.6」を「-L<そのディレクトリ>」に変えて、ビルドしてください。 * 上のひとりごとで書いたように「python-config --cflags --ldflags」を実行してみて、出力を確認してみてください。もし「python-config」が実行できなければ、「python-dev」をインストールしてください。(手元にsqueezeがないんで、パッケージ名が間違っているかもしれませんが) * それでも解決しないのであれば、「find /usr/lib -name 'libpython*.a'」を実行してみて、pythonのライブラリファイルを探してみてください。 # simoneさんの言うとおり、コンパイルは通るんだからライブラリもインストールされているはずなんだがなぁ...。 # (neurontさんからの指摘があり、python-configの「--libs」を「--ldflags」に変更しました。)