【发布时间】:2019-08-26 22:32:13
【问题描述】:
我有一个与SO post 非常相似的问题;但是,在那里实施建议的修复后 - 我仍然收到以下错误。
我正在尝试编译由 Cython 生成的 C 文件。
cython ConnectFour.pyx --embed
我尝试像这样编译我的 c 文件:
gcc -I /usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/Headers -o ConnectFour ConnectFour.c
但是我收到以下错误:
Undefined symbols for architecture x86_64:
"_PyBaseObject_Type", referenced from:
___Pyx_InBases in ConnectFour-3c26d7.o
"_PyBytes_FromStringAndSize", referenced from:
___pyx_pymod_exec_ConnectFour in ConnectFour-3c26d7.o
___Pyx_InitStrings in ConnectFour-3c26d7.o
"_PyCFunction_NewEx", referenced from:
___pyx_pymod_exec_ConnectFour in ConnectFour-3c26d7.o
"_PyCFunction_Type", referenced from:
___Pyx_PyObject_CallOneArg in ConnectFour-3c26d7.o
___Pyx_PyObject_CallNoArg in ConnectFour-3c26d7.o
___Pyx_PyObject_Call2Args in ConnectFour-3c26d7.o
___Pyx_PyCFunction_FastCall in ConnectFour-3c26d7.o
___pyx_pf_11ConnectFour_36eval_heuristic_score in ConnectFour-3c26d7.o
___pyx_pf_11ConnectFour_38list_valid_col_idxs in ConnectFour-3c26d7.o
___pyx_pf_11ConnectFour_40deep_copy_board in ConnectFour-3c26d7.o
...
"_PyCode_New", referenced from:
___Pyx_InitCachedConstants in ConnectFour-3c26d7.o
___Pyx_CreateCodeObjectForTraceback in ConnectFour-3c26d7.o
"_PyDict_Copy", referenced from:
___pyx_pw_11ConnectFour_7profile_1wrapper in ConnectFour-3c26d7.o
___pyx_pw_11ConnectFour_5timer_1wrapper in ConnectFour-3c26d7.o
"_PyDict_GetItemString", referenced from:
___pyx_pymod_exec_ConnectFour in ConnectFour-3c26d7.o
"_PyDict_GetItemWithError", referenced from:
___Pyx_PyDict_GetItem in ConnectFour-3c26d7.o
"_PyDict_New", referenced from:
___pyx_pymod_exec_ConnectFour in ConnectFour-3c26d7.o
___Pyx_Import in ConnectFour-3c26d7.o
___Pyx_CyFunction_get_dict in ConnectFour-3c26d7.o
___Pyx_CyFunction_get_annotations in ConnectFour-3c26d7.o
___pyx_pf_11ConnectFour_28count_players in ConnectFour-3c26d7.o
___pyx_pf_11ConnectFour_52num_in_a_row in ConnectFour-3c26d7.o
我基于this 和this 出现所以我错过了一些图书馆链接?所以我尝试了以下方法。
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/lib/libpython3.7.dylib
现在我得到一个 lib not found 错误。
ld: 找不到库 -l/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/libpython3.7.dylib
阅读所有这些 SO 帖子(第一次与 C 打交道),我完全无法理解,因此将不胜感激。
我需要具备什么才能编译并运行我的 C 文件而不会出错?
我知道我的标头位于/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/Headers,而库位于/usr/local/Cellar/python3/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/libpython3.7.dylib
我在 OSX 上,我使用 Homebrew 安装了 Python。
【问题讨论】:
-
对 MacOS 了解不多,但它没有
python-config-utility 可以按此处所述使用:stackoverflow.com/a/45424720/5769463 -
是的,我读过那篇文章,但似乎不清楚我实际需要做什么 - 几乎不明白那里的答案哈哈
-
所以也许你应该从一个简单的模块开始,它可以按照cython.readthedocs.io/en/latest/src/userguide/… 的描述构建并比较使用的命令,例如 cythonize
-
啊,是的,我确实做到了。我设法从 python 运行我的脚本,但我正试图更上一层楼,即只运行一个来自 C 的可执行文件,但弄清楚它是一场噩梦......
-
我明白了,那我恐怕帮不上什么忙了。