2015-05-04 124 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