将undefined引用到python-dev头中的函数

时间:2015-05-04 21:32:36

标签: python c gcc linker

我正在尝试将一些Python代码嵌入到C中;这是我第一次这样做。

以下是我在互联网上由指南复制的第一次尝试的简单代码:

#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

似乎连接阶段存在问题,但是我无法想象看到我已经向链接器传递了标头和库的确切路径的问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

尝试重新排序编译命令,以便在 C源文件之后指定所有链接选项:

gcc -std=c99 -o main -I /usr/local/include/python3.4m main.c \
  -L /usr/local/lib -lpython3.4m