我正在尝试将一些Python代码嵌入到C中;这是我第一次这样做。
以下是我第一次尝试的简单代码,它是由internet上的一个向导复制的:
#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
看起来链接阶段有问题,但我无法理解问题在哪里,因为我已经将头和库的确切路径传递给了链接器。我怎样才能解决这个问题?
最佳答案
尝试重新排序编译命令,以便在C源文件之后指定所有链接选项:
gcc -std=c99 -o main -I /usr/local/include/python3.4m main.c \
-L /usr/local/lib -lpython3.4m