Cython을 사용하여 hello.pyx 파일을 exe 파일로 컴파일하려고합니다.CPython 소스 - STATIC python26.lib을 작성하는 방법은 무엇입니까?
첫 번째 단계는 "cython --cplus --embed hello.pyx"명령을 사용하여 hello.pypp 파일을 hello.cpp 파일로 컴파일하는 것입니다. Embed
옵션은 Generate a main() function that embeds the Python interpreter
을 의미합니다. 나는 의존성이없는 독립적 인 exe를 만들려고 노력하고있다. hello.cpp
에서
가 나는 #include "Python.h"
, 그래서 여기에서 파이썬 소스를 다운로드하고 있습니다 : http://www.python.org/download/releases/2.6.6/을 Gzip으로 압축 된 소스 타르 볼 (2.6.6)을 선택. 나는 include dir을 추가하고 Python26.lib가 누락되었다는 에러를 얻는다. 그래서 그것을 컴파일하려고합니다. 기본 빌드는 python26.lib를 만듭니다 만 200KB 밖에되지 않습니다. 정적 lib가 아니며 hello.cpp를 컴파일 할 때 누락 된 참조 오류가 발생합니다.
README에는 정적으로 빌드하는 방법에 대한 유용한 지침이 없습니다.
http://svn.python.org/projects/python/trunk/PCbuild/readme.txt
솔루션은 어떤 구성이 없습니다 : 그러나, 나는 트렁크 (3.x의)에서 파이썬의 최신 버전, 정적 건물에 대한 몇 가지 유용한 정보가 온라인 README 파일을 검색 좀했습니다 정적 라이브러리의 경우. 그러나 쉽게 DLL 대신 정적 라이브러리를 빌드합니다. "구성 유형"을 "정적 라이브러리 (.lib)"로 설정하고 전 처리기 매크로 "Py_ENABLE_SHARED"를 "Py_NO_ENABLE_SHARED"로 변경하기 만하면됩니다. "다중 스레드 DLL (/ MD)"에서 "다중 스레드 (/ MT)"로 "런타임 라이브러리"를 변경해야 할 수도 있습니다.
여기에도 세부 정보가 너무 많지 않습니다. 솔루션의 모든 프로젝트를 정적 라이브러리로 빌드하도록 설정합니까? 아니면 pythoncore 만? "Python"과 "Pythonw"프로젝트는 "Applications"이므로 런타임 라이브러리를/MT로만 변경할 수 있습니다. 다음은 내가하고있는 단계입니다.
- "해제"모드로 변경.
- 프로젝트 "파이썬"-
/MT
설정하고 추가 처리기 정의Py_NO_ENABLE_SHARED
- 프로젝트 "Pythoncore"-
Static library (.lib)
로 구성 유형,/MT,Py_NO_ENABLE_SHARED
- 프로젝트 "Pythonw"로 처리기 정의
Py_ENABLE_SHARED
교체 - 동일 같이 " Python "이라고합니다. - "Python"에서 빌드를 마우스 오른쪽 버튼으로 클릭하십시오. 빌드의
요약 :
는 빌드 : 5 1은 0이 실패
kill_python (ok)
make_buildinfo (ok)
make_versioninfo (ok)
pythoncore (ok)
w9xpopen (ok)
python (4 errors)
프로젝트를 생략 최신, 0, 실패, 성공 "Python"은 다음과 같습니다.
------ Build started: Project: python, Configuration: Release Win32 ------
Compiling...
python.c
Compiling resources...
Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
Copyright (C) Microsoft Corporation. All rights reserved.
Linking...
pythoncore.lib(sysmodule.obj) : error LNK2019: unresolved external symbol __Py_svnversion referenced in function _svnversion_init
pythoncore.lib(getversion.obj) : error LNK2019: unresolved external symbol _Py_GetBuildInfo referenced in function _Py_GetVersion
pythoncore.lib(dynload_win.obj) : error LNK2019: unresolved external symbol __Py_DeactivateActCtx referenced in function __PyImport_GetDynLoadFunc
pythoncore.lib(dynload_win.obj) : error LNK2019: unresolved external symbol __Py_ActivateActCtx referenced in function __PyImport_GetDynLoadFunc
d:\python\src4\PCbuild\\python.exe : fatal error LNK1120: 4 unresolved externals
Build Time 0:02
/PCbuild/디렉토리를 보면 "pythoncore.lib"(10MB)가 있지만 "python26.lib"가 없다는 것을 알 수 있습니다.
나는 이러한 오류에 대한 구글
, 나는 단지 mail.pythong.org에 하나의 대화를 찾을 수 : http://www.groupsrv.com/computers/about397568.html나는 pythoncore 프로젝트에 prepreocessor 정의 "_USRDLL"를 제거했지만 여전히 오류가 동일합니다. pythoncore에서
전처리 정의는 다음과 같습니다
_USRDLL
Py_BUILD_CORE
Py_NO_ENABLE_SHARED
WIN32
하는 I는 "상속 값을"나는 다른 상자에서 참조 편집을 클릭하면 : 나는했습니다 때문에 NDEBUG가 이상한 것을
NDEBUG
_WIN32
모드를 해제로 변경했습니다.
모든 서비스 팩이 설치된 Visual Studio 2008 (Express는 아님)을 사용하고 있습니다.
btw. 이전에 전체 솔루션을 구축하려고 시도했지만 경로가 "../../dba-"로 시작하는 누락 된 파일에 대한 오류가있었습니다.
파이썬의 2.6.2과 2.6.6 버전을 컴파일 시도,하지만 그들은 모두 같은 오류를 던져 : pythoncore.lib(sysmodule.obj) : error LNK2019: unresolved external symbol
Cython 코드에서 외부 모듈을 사용하고 있지 않습니까? –
@ IgnacioVazquez-Abrams : 아니요, Hello World의 간단한 인쇄물 만 있습니다. 'Hello.pyx' 소스 :'def sayhello() : \t 인쇄 "Hello world in Cython!" if __name__ == "__main__": \t sayhello()'. 문제는 정적 라이브러리를 구축하는 것이지 Cython 코드 자체를 만드는 것이 아닙니다. –
NDEBUG은 "No Debug"를 의미하며 릴리스 빌드에서는 정상입니다. –