2010-12-12 3 views
11

cython을 사용하여 python 소스 코드를 foo.py로 컴파일하려고합니다. foo.py에서Cython을 사용하여 C로 파이썬 컴파일

:

print "Hello World" 

내가 실행 해요 명령은 cython foo.py입니다.

undefined reference to 'main' :

문제는 gcc를 사용하여 foo.c를 컴파일하면 다음과 같은 에러가 발생한다는 것입니다.

답변

19

Python에서 C로 코드를 변환 할 때 (Cython을 사용하여) 코드를 공유 객체로 컴파일 할 수있는 c 코드로 변환합니다. 실행 파일을 만들려면 cython 변환 명령에 "--embed"를 추가해야합니다. 이 플래그는 필요한 'main'함수를 추가하므로 c 코드를 실행 파일로 컴파일 할 수 있습니다. exec를 실행하려면 Python .so 런타임 라이브러리가 필요합니다.

11

Cython 설명서를 읽으십시오. 이것은 또한 (잘하면) Cython이 무엇인지, 그렇지 않은지를 가르쳐 줄 것입니다. Cython은 공유 객체/dll 인 Python 확장 (범용 Python-C 컴파일러가 아닌)을 만드는 데 사용됩니다. 동적으로로드 된 라이브러리는 독립 실행 형 프로그램처럼 main 기능을 가지고 있지 않지만 컴파일러는 궁극적으로 실행 파일을 연결한다고 가정합니다. 당신은 플래그 (-shared methinks를 통해 달리 말해야하지만, 다시, Cython 문서를 참조하십시오.) - 더 좋게는 스스로 컴파일하지 말고 setup.py을 사용하십시오 (다시 한번, Cython 문서를 읽으십시오).

+0

+1이 설명은 – user225312

+2

입니다.이 답변으로 인해 작업 확장이 컴파일되었습니다. RoeeK의 대답은 링크 문제를 해결했지만, Python이 ImportError 오류로 가져 오기를 실패한 후에 동적 모듈은 init 함수를 정의하지 않습니다. 정말 고마워요, 3 rtfm이 암시하는 것처럼 어리 석음을 가정하지 않고도 강의 스타일을 적게 쓰면 좋을 것 같습니다. – deeenes

0

일반적으로 distutils를 사용하여 cython으로 생성 된 파일을 컴파일합니다. 이것은 또한 포터블 방식으로 필요한 모든 include 디렉토리를 제공합니다.

관련 문제