2016-06-19 5 views
4

파이썬이 인텔 icc 컴파일러로 컴파일되므로 우분투 14.04에서 icc 컴파일러로 소스에서 cython을 빌드하려고합니다. 내가 오류 중 하나가 ICC 컴파일러를 사용하여 소스에서 사이 썬 설치에 대한 이동 않습니다 어떻게cython을 icc로 컴파일 할 수 있습니까?

Traceback (most recent call last): 
File "/usr/local/bin/cython", line 9, in <module> 
load_entry_point('Cython==0.24', 'console_scripts', 'cython')() 
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 351, in load_entry_point 
return get_distribution(dist).load_entry_point(group, name) 
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2363, in load_entry_point 
return ep.load() 
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2088, in load 
entry = __import__(self.module_name, globals(),globals(), ['__name__']) 
File "/usr/local/lib/python3.4/dist-packages/Cython/Compiler/Main.py", line 28, in <module> 
from .Scanning import PyrexScanner, FileSourceDescriptor 
ImportError: /usr/local/lib/python3.4/dist-packages/Cython/Compiler/Scanning.cpython-34m.so: undefined symbol: __intel_sse2_strchr 

다음있어 사이 썬 pip3이 사이 썬 설치를 사용하여 사이 썬 설치하려고하고 실행

?

나는이 시도하고 (GitHub의에서 다운로드)를 사이 썬 디렉토리

python3.4의 setup.py의 CC = ICC 나는 다음과 같은 메시지가

에서

작동하지 않습니다 -

/home/aa/libPython/cython/Cython/Distutils/build_ext.py:20: UserWarning:  
Cython.Distutils.build_ext does not properly handle dependencies and is deprectated. Use Cython.Build.build_ext instead. 
"Cython.Distutils.build_ext does not properly handle dependencies " 
Unable to find pgen, not compiling formal grammar. 
invalid command name 'CC=icc' 

답변

5

CC=icc은 icc로 빌드하기에 충분하지 않습니다. 또한 icc (https://stackoverflow.com/a/10891764/196561; icc는 ELF 파일에 내부 라이브러리를 추가 할 것입니다)와 링크해야합니다. 따라서 setup.py에 대한 링커 변수의 이름을 찾으십시오. LD 일 수도 있고 icc로 설정할 수도 있습니다. LD=icc (기본값은 gcc입니다).

사실은 LINKCC입니다 - https://github.com/cython/cython/blob/970c2fc0e676ca22016e14147ada0edba937dc6b/Cython/Build/BuildExecutable.py

CC = get_config_var('CC', os.environ.get('CC', '')) 
CFLAGS = get_config_var('CFLAGS') + ' ' + os.environ.get('CFLAGS', '') 
LINKCC = get_config_var('LINKCC', os.environ.get('LINKCC', CC)) 

그래서, ICC와 사이 썬에 대한 올바른 빌드는 변수가 setup.py에 전달하는 방법을 알고 How to tell distutils to use gcc?를 확인하거나

을 시도하지 않는, CC=icc LINKCC=icc 함께한다
CC=icc LINKCC=icc python3.4 setup.py 

업데이트 : gansub의 메시지에 따르면 "LDSHARED=icc"env. 변수 사이 썬를 구축하는 데 도움이 될 것입니다 : "당신은 환경 변수 LDSHARED를 설정 = ICC 필요"- Syrtis 주요에서 http://chat.stackoverflow.com/transcript/message/31231907#31231907https://stackoverflow.com/a/37914227

업데이트 : 응웬, Loc 데이 Q (인텔 https://software.intel.com/en-us/articles/thread-parallelism-in-cython 기사 "사이 썬 *의 스레드 병렬이"있다), 12 월 15 일 LDSHARED="icc -shared" CC=icc의 권고와 2016 :

명시 적으로,이 응용 프로그램을 컴파일하는 인텔 ICC를 사용하여 다음 명령으로 setup.py 파일을 실행하려면 :

$ LDSHARED="icc -shared" CC=icc python setup.py build_ext –-inplace 
+0

gansub, 그러나'python3.4 setup.py CC = icc'가 당신이 사용하는 명령이었고 올바르게 처리 되었습니까? 나는 cython도없고 ICC도없고, 나는 pyhton을 말하지 않는다. 그러나 인용 된 오류 메시지에서 링크 단계가 올바르지 않다고 결론 지을 수 있습니다.'icc'가 아니라'ld' 또는'gcc'에 의해 수행되었습니다. 그래서 빌드 시스템이'icc'와 연결되도록 확인하십시오. – osgx

+0

distutils.cfg 파일을 사용하여 CC 및 LINKCC를 설정하십시오 (http://stackoverflow.com/questions/16737260/how-to-tell-distutils- gcc – osgx

+0

gansub, 당신의 연결 명령'x86_64-linux-gnu-gcc'는 여전히 올바르지 않습니다. – osgx