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