我从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'
答案 0 :(得分:2)
鉴于您在/ usr / local中安装了python-2.7, 你需要做一些调整:
解决此错误:
gcc -I/usr/local/in**lc**ude/python2.7
明确指定库路径(在正确配置的系统上,它应该默认工作,但我们不知道并且它不会受到伤害):-L/usr/local/lib -lpython2.7
(添加 64 如果需要,可以使用lib的后缀)
与定义floor
和pow
的数学库相关联:-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