2015-05-04 84 views
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 

看起来链接阶段存在问题,但我不能忽视问题出在哪里,因为我已经向链接器传递了标题和库的确切路径。我该如何解决这个问题?

回答

2

尝试重新安排你的编译命令,以便指定所有链接选项你的C源文件:

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

是的,我已经解决了前面的问题,但现在我已经这个问题: 在/ 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但我没有解决问题:/ –

+0

@MatteoArella你在哪里添加了'-lm'?尝试几个不同的地方 - 在'-lpython3.4m'之前和之后,看看哪一个可以工作。如果两者都不起作用,请尝试在终端中运行'python-config --ldflags'并将其用作链接器标志。 – ace

+0

请注意,您可能必须更改'python-config'输出中的标志顺序 - 如果它不起作用,请尝试在所有'-L'标志之后和所有'-l之前移动'-lpython3.4m' '旗帜。 – ace