如何编译调用python2.7函数的c编程

时间:2015-01-29 12:54:52

标签: python

我从c程序调用python函数。我可以使用下面的命令编译和链接2.6

gcc py_sample.c -I/usr/include/python2.6 -lpython2.6 ;

但要求是python2.7。请帮助如何在gcc命令中编译和链接。我尝试了以下命令,但仍面临问题。

gcc -I/usr/local/inlcude/python2.7  -ldl /usr/lib64/python2.7 -Wall -fPIC py_sample.c -lpython2.7

/usr/local/lib/libpython2.7.a(posixmodule.o): In function `posix_tmpnam':
/tmp/Python-2.7/./Modules/posixmodule.c:7275: warning: the use of `tmpnam_r' is dangerous, better use `mkstemp'
/usr/local/lib/libpython2.7.a(posixmodule.o): In function `posix_tempnam':
/tmp/Python-2.7/./Modules/posixmodule.c:7230: warning: the use of `tempnam' is dangerous, better use `mkstemp'
/usr/local/lib/libpython2.7.a(signalmodule.o): In function `timeval_from_double':
/tmp/Python-2.7/./Modules/signalmodule.c:112: undefined reference to `floor'
/tmp/Python-2.7/./Modules/signalmodule.c:112: undefined reference to `floor'
/tmp/Python-2.7/./Modules/signalmodule.c:113: undefined reference to `fmod'
/tmp/Python-2.7/./Modules/signalmodule.c:113: undefined reference to `fmod'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `float_is_integer':
/tmp/Python-2.7/Objects/floatobject.c:976: undefined reference to `floor'
/usr/local/lib/libpython2.7.a(floatobject.o): In function `float_as_integer_ratio':
/tmp/Python-2.7/Objects/floatobject.c:1711: undefined reference to `floor'

2 个答案:

答案 0 :(得分:2)

鉴于您在/ usr / local中安装了python-2.7, 你需要做一些调整:

解决此错误:

gcc -I/usr/local/in**lc**ude/python2.7

明确指定库路径(在正确配置的系统上,它应该默认工作,但我们不知道并且它不会受到伤害):-L/usr/local/lib -lpython2.7(添加 64 如果需要,可以使用lib的后缀)

与定义floorpow的数学库相关联:-lm

你的最终命令应该是:

gcc -Wall -fPIC -I/usr/local/include -L/usr/local/lib -ldl -lpython2.7 -lm py_sample.c

答案 1 :(得分:2)

Iskren已经为您解决了具体问题。我在这里找到标志需要的一般情况。

根据Compiling and Linking under Unix-like systems,Python将告诉您通过使用Python pythonX.Y-config命令(其中X和Y代表您拥有的版本),为您的系统推荐的编译和链接选项。 --cflags--ldflags用于请求编译和链接标记。

该链接提供了Python 2.7的示例

$ /opt/bin/python2.7-config --cflags
-I/opt/include/python2.7 -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes

$ /opt/bin/python2.7-config --ldflags
-L/opt/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic