如何用 icc 覆盖 python 的 distutils gcc 链接器?

How to override python's distutils gcc linker with icc?

我能够从源代码在 Ubuntu 14.04 上成功构建 cython,如本 SE question/answer and I downloaded the source code from here - Cython source code download 中所述。

编译cython的命令是

CC=icc LINKCC=icc python3.4 setup.py build

我附上构建日志。 STILL 使用 gcc 进行链接。这是构建日志的示例。

看起来 CC=icc LINKCC=icc NOT 似乎将链接器更改为 icc。它仍在使用 x86_64-linux-gnu-gcc。当我设置环境变量 LDFLAGS = -lirc 时,环境变量被传递给 gcc 而不是 icc。 此外,当我将打印语句放入 BuildExecutable.py 时,它们不会被调用。

icc -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.4m -c /home/aswin/libPython/Cython-0.24/Cython/Plex/Scanners.c -o build/temp.linux-x86_64-3.4/home/aswin/libPython/Cython-0.24/Cython/Plex/Scanners.o
icc: command line warning #10006: ignoring unknown option '-fwrapv'
creating build/lib.linux-x86_64-3.4
creating build/lib.linux-x86_64-3.4/Cython
creating build/lib.linux-x86_64-3.4/Cython/Plex
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -lirc -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.4/home/aswin/libPython/Cython-0.24/Cython/Plex/Scanners.o -o build/lib.linux-x86_64-3.4/Cython/Plex/Scanners.cpython-34m.so

我该如何解决?

您可以尝试将 -static-intel 添加到 link 选项,以便所有英特尔特定功能都是静态的-linked。

您需要覆盖链接器

通过设置 export LDSHARED="icc -shared"。这会生成 icc 链接器。这是一个构建日志的示例,输入

CC=icc python3.4 setup.py build_ext

或者,您也可以通过键入

来执行相同的操作

LDSHARED="icc -shared" CC=icc python3.4 setup.py build_ex

icc -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.4m -c /home/a/libPython/Cython-0.24/Cython/Plex/Scanners.c -o build/temp.linux-x86_64-3.4/home/a/libPython/Cython-0.24/Cython/Plex/Scanners.o
icc: command line warning #10006: ignoring unknown option '-fwrapv'
creating build/lib.linux-x86_64-3.4
creating build/lib.linux-x86_64-3.4/Cython
creating build/lib.linux-x86_64-3.4/Cython/Plex
icc -shared -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.4/home/a/libPython/Cython-0.24/Cython/Plex/Scanners.o -o build/lib.linux-x86_64-3.4/Cython/Plex/Scanners.cpython-34m.so
cythoning /home/a/libPython/Cython-0.24/Cython/Plex/Actions.py to /home/a/libPython/Cython-0.24/Cython/Plex/Actions.c