首页 > 解决方案 > 使用 pip install 时如何解决 clang 错误

问题描述

当我执行

pip install -r requirements.txt -i https://pypi.doubanio.com/simple

有一个错误:

clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include -DLIBART_COMPILATION -DLIBART_VERSION="2.3.12" -I/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM -I/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/libart_lgpl -I/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1 -I/Users/xuhongxin/.pyenv/versions/3.6.5/include/python3.6m -c /private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.c -o build/temp.macosx-10.15-x86_64-3.6/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.o
/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.c:100:9: error: implicitly declaring library function 'strlen' with type 'unsigned long (const char *)' [-Werror,-Wimplicit-function-declaration]
    len = strlen (s);
        ^
/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.c:100:9: note: include the header <string.h> or explicitly provide a declaration for 'strlen'
/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.c:102:3: error: implicitly declaring library function 'memcpy' with type 'void *(void *, const void *, unsigned long)' [-Werror,-Wimplicit-function-declaration]
    memcpy (new, s, len);
    ^
/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.c:102:3: note: include the header <string.h> or explicitly provide a declaration for 'memcpy'
/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.c:172:10: error: implicitly declaring library function 'strcmp' with type 'int (const char *, const char *)' [-Werror,-Wimplicit-function-declaration]
    if (!strcmp (nc->table[i & mask].name, name))
            ^
/private/var/folders/4h/ktzb3kwn0zb24zppgz9hzzv80000gp/T/pip-build-l4jdu8pd/reportlab/src/rl_addons/renderPM/gt1/gt1-namecontext.c:172:10: note: include the header <string.h> or explicitly provide a declaration for 'strcmp'
3 errors generated.
error: command 'clang' failed with exit status 1

标签: pythonpipodoo-12

解决方案


不要做。

可以通过设置编译器在命令行上完成:

python setup.py build_ext -c

python setup.py build_ext --help-compiler 查看可用选项。

但是,所有扩展都必须使用用于构建 python 发行版的相同编译器,因为扩展模块将由解释器加载。

如果它们是由不同的编译器构建的,则 python 解释器无法安全地加载它们。

对于 Anaconda,它的 python 发行版是用 MSVC 构建的,因此应该使用与 anaconda 环境相同的编译器进行扩展。在这种情况下,激活 anaconda 环境就足够了,尽管编译器可以像上面那样显式设置。

请参阅 Windows 编译器 python wiki 条目。


推荐阅读