1
我想将一些Python代码嵌入到C中;这是我第一次做这样的事情。引用未定义在python-dev头文件中的函数
下面是我通过引导互联网上复制第一次尝试的简单代码:
#include <Python.h>
void exec_pycode(const char* code)
{
Py_Initialize();
PyRun_SimpleString(code);
Py_Finalize();
}
int main(int argc, char **argv) {
exec_pycode(argv[1]);
return 0;
}
所以我已经安装python3.4-dev软件包。
那么对于具有我键入链接信息:
pkg-config --cflags --libs python3
然后我试图编译我的代码:
gcc -std=c99 -o main -I /usr/local/include/python3.4m -L /usr/local/lib -lpython3.4m main.c
(根据之前的命令)
但这是结果:
/tmp/ccJFmdcr.o: in function "exec_pycode":
main.c:(.text+0xd): reference undefined to "Py_Initialize"
main.c:(.text+0x1e): reference undefined to "PyRun_SimpleStringFlags"
main.c:(.text+0x23): reference undefined to "Py_Finalize"
collect2: error: ld returned 1 exit status
看起来链接阶段存在问题,但我不能忽视问题出在哪里,因为我已经向链接器传递了标题和库的确切路径。我该如何解决这个问题?
是的,我已经解决了前面的问题,但现在我已经这个问题: 在/ usr /local/lib/libpython3.4m.a(pytime.o):在函数“_PyTime_ObjectToTime_t”中: /home/matteo/Scrivania/Python-3.4.3/Python/pytime.c:212:undefined引用“ceil” /home/matteo/Scrivania/Python-3.4.3/Python/pytime.c:214:undefined对“floor”的引用 /usr/local/lib/libpython3.4m.a(pytime.o):在函数“ _PyTime_ObjectToDenomi nator“: /home/matteo/Scrivania/Python-3.4.3/Python/pytime.c:173:未定义引用”ceil“...(和所有其他数学函数) 所以我试图重新编译添加-lm但我没有解决问题:/ –
@MatteoArella你在哪里添加了'-lm'?尝试几个不同的地方 - 在'-lpython3.4m'之前和之后,看看哪一个可以工作。如果两者都不起作用,请尝试在终端中运行'python-config --ldflags'并将其用作链接器标志。 – ace
请注意,您可能必须更改'python-config'输出中的标志顺序 - 如果它不起作用,请尝试在所有'-L'标志之后和所有'-l之前移动'-lpython3.4m' '旗帜。 – ace