2 回答
TA贡献1868条经验 获得超4个赞
所以我最终按照@ead 的建议更仔细地阅读了这篇 SO 帖子,结果证明这是一个很大的帮助。为遇到类似问题的人编写以下内容。
运行后,cython ConnectFour.pyx --embed
我的目标是将 .c 文件编译为可执行文件。这意味着 (1) 需要构建 .o 目标文件和 (2) 将 .o 目标文件转换为可运行的可执行文件,如下所示:./MyExecutable
步骤 1. 构建 .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 - 我必须运行以下命令。请注意 --cflags 标志。该命令为我的 Python 3 安装运行配置实用程序,该实用程序安装在奇怪的目录中(因为我通过 Homebrew 安装了 Python)。
/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/bin/python3.7-config--cflags
下面是它为我生成的标志的片段。
-I/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/include/python3.7m -I/usr/local.......etc etc.
使用标志我运行以下来生成我的目标文件。
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. 将目标文件转换为可执行文件
为了生成可执行文件,我们需要运行以下命令。
gcc main.o hello.o -o prog <our ldflags>
为了生成 ldflags,这次我需要运行以下命令。我们再次使用配置实用程序,但这次使用--ldflags。
/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/bin/python3.7-config --ldflags
这为我生成了以下标志。
-L/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/config-3.7m-darwin -lpython3.7m ...etc. etc.
使用这些标志,我运行以下命令来生成我的可执行文件。
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.
完毕!一个可执行文件弹出,我像运行任何其他 C 可执行文件一样运行它。
特别感谢@ead 为我指明了正确的方向。
TA贡献1812条经验 获得超5个赞
尝试跑步
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 标志将该目录添加到搜索路径,然后使用 -l 进行链接(因为 -l 似乎不接受绝对路径),在 Linux 上,使用 -l 时至少省略了 lib 前缀和扩展名,我从来没有虽然使用了 MacOSX,但如果不起作用,请尝试不同的组合。
添加回答
举报