2 回答

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
所以我最終按照@ead 的建議更仔細(xì)地閱讀了這篇 SO 帖子,結(jié)果證明這是一個(gè)很大的幫助。為遇到類似問題的人編寫以下內(nèi)容。
運(yùn)行后,cython ConnectFour.pyx --embed
我的目標(biāo)是將 .c 文件編譯為可執(zhí)行文件。這意味著 (1) 需要構(gòu)建 .o 目標(biāo)文件和 (2) 將 .o 目標(biāo)文件轉(zhuǎn)換為可運(yùn)行的可執(zhí)行文件,如下所示:./MyExecutable
步驟 1. 構(gòu)建 .o 目標(biāo)文件
我們需要運(yùn)行以下命令,但我遇到的問題是找出如何獲取我的標(biāo)志。
gcc -c hello.c -o hello.o <our cflags>
由于我是通過 Homebrew 安裝 Python 的,因此 Python 及其頭文件位于以下目錄中。
/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/bin/
為了為我生成 cflags - 我必須運(yùn)行以下命令。請注意 --cflags 標(biāo)志。該命令為我的 Python 3 安裝運(yùn)行配置實(shí)用程序,該實(shí)用程序安裝在奇怪的目錄中(因?yàn)槲彝ㄟ^ Homebrew 安裝了 Python)。
/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/bin/python3.7-config--cflags
下面是它為我生成的標(biāo)志的片段。
-I/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/include/python3.7m -I/usr/local.......etc etc.
使用標(biāo)志我運(yùn)行以下來生成我的目標(biāo)文件。
gcc -c ConnectFour.c -o ConnectFour.o -I/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/include/python3.7m -I/...etc etc.
步驟 2. 將目標(biāo)文件轉(zhuǎn)換為可執(zhí)行文件
為了生成可執(zhí)行文件,我們需要運(yùn)行以下命令。
gcc main.o hello.o -o prog <our ldflags>
為了生成 ldflags,這次我需要運(yùn)行以下命令。我們再次使用配置實(shí)用程序,但這次使用--ldflags。
/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/bin/python3.7-config --ldflags
這為我生成了以下標(biāo)志。
-L/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/config-3.7m-darwin -lpython3.7m ...etc. etc.
使用這些標(biāo)志,我運(yùn)行以下命令來生成我的可執(zhí)行文件。
gcc ConnectFour.o -o ConnectFour -L/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/config-3.7m-darwin -lpython3.7m ...etc. etc.
完畢!一個(gè)可執(zhí)行文件彈出,我像運(yùn)行任何其他 C 可執(zhí)行文件一樣運(yùn)行它。
特別感謝@ead 為我指明了正確的方向。

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
嘗試跑步
gcc -I /usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/Headers -o ConnectFour ConnectFour.c -L/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7 -lpython3.7
-L 標(biāo)志將該目錄添加到搜索路徑,然后使用 -l 進(jìn)行鏈接(因?yàn)?-l 似乎不接受絕對路徑),在 Linux 上,使用 -l 時(shí)至少省略了 lib 前綴和擴(kuò)展名,我從來沒有雖然使用了 MacOSX,但如果不起作用,請嘗試不同的組合。
添加回答
舉報(bào)