2017-05-24 1 views
0

Boost.Python을 사용하려면 here 지시를 따르려고합니다. 소스 코드가 해당 웹 페이지에 있습니다. 내가 컴파일 할 수있는이 간단한 예제 코드를 링크하지만 파이썬 명령 줄에서 결과 모듈을 가져올 수 없습니다. 그것은 항상 오류 : 그 페이지는 단지 말한다 때문에 문제가 무엇인지 전혀 모른다Boost.Python에 의해 생성 된 dll을 가져올 수 없습니다 (Boost Python의 퀵 스타트에 따라)

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named hello_ext 

:... "그게 다야 우리는 우리는 지금 공유 라이브러리로이를 구축 할 수 있습니다 완료 결과 DLL은 이제 볼 수 있습니다 파이썬으로. " 이것은 내 건축 환경 :

  • 윈도우 7 64 비트, 나는 관리자 및 부스트 버전이 here에서 1.64.0 (미리 컴파일 된 바이너리 boost_1_64_0 - MSVC-14.0-64.exe을 다운로드
  • 관리자로 cmd를 실행할입니다)
  • 파이썬 버전 대상이 DLL
  • 프로젝트 이름의 ConsoleApplication1이다,
  • 비주얼 스튜디오 2015 64 비트 갱신 3
  • 2.7.13이므로 출력 ConsoleApplication1.dll이다. 파일 이름을 hello_ext.dll로 변경했지만 같은 오류가 발생했습니다.
  • 나는 64 구성으로 구축하고 나는 출력 ConsoleApplication1.dll 내가 경로를 추가 한
  • 64 비트 정말입니다 DUMPBIN 확인했다 ...... \의 ConsoleApplication1 \ 64 \에 ConsoleApplication1.dll이 포함되어 출시 파이썬 명령 줄 안에 sys.path.

그래서 파이썬으로 모듈을 가져 오는 방법을 알려주시겠습니까? 고마워.

+0

이 모든 문제를 해결하고 [Visual Studio 용 사전 빌드 된 바이너리] (https://sourceforge.net/projects/boost/files/boost-binaries/1.64.0/) – PaulMcKenzie

+0

오류 : "해결되지 않은 외부 기호 __imp_PyString_Type "(구성은 x64). Tons of "오류 LNK2001 : 확인되지 않은 외부 기호"x32 구성의 __declspec (dllimport) ... "오류 – user5280911

+0

"__imp_ "로 시작하는 오류는 링커 설정에서 적절한 가져 오기 라이브러리".lib "파일을 지정하지 않음을 나타냅니다 .나는 당신의 설명에서 당신이 임포트 라이브러리 또는 라이브러리의 이름을 링커에게 말해 주었다고 언급하지 않았다. 경로 설정은이 작업을 수행하지 않으며 DLL은 빌드 프로세스에서 아무런 역할을하지 않습니다. 런타임시에만 사용됩니다. 미리 작성된 바이너리에는 가져 오기 라이브러리 (크기가 메가 바이트 인 정적 라이브러리와 달리 매우 크지 않은 .lib 파일)가 포함됩니다. – PaulMcKenzie

답변

1

나는 스스로 문제를 해결했다. 그의 유용한 제안에 대해 jagerman에게 감사드립니다.

(1) ConsoleApplication1.dll의 출력 파일 이름을 hello_ext.pyd로 변경하십시오. Pages-> General-> Target Extension을 ".pyd"로 설정하여이 이름 바꾸기를 자동화 할 수 있습니다. hello_ext.pyd 파일이 파이썬의 검색 경로에 있는지 확인하십시오. 파이썬의 빌트인 검색 경로 중 하나 인 C : \ Python27 \ DLL에 던져 넣을 수 있습니다.

(2) 이제 다른 가져 오기 오류가 발생합니다. DLL로드 실패 : 지정한 모듈을 찾을 수 없습니다. hello_ext.pyd의 파일 크기를 면밀히 살펴보면 19KB 밖에되지 않는 유선을 발견 할 수 있습니다. 즉, 파이썬으로 가져 오기 위해 필요한 모든 것을 포함하고 있지 않으므로 파이썬은 누락 된 부분을 적절히 임포트해야합니다. 예, 당신은 짐작할 수 있습니다 - 누락 된 유일한 물건은 Boost입니다. 파이썬 라이브러리이므로 PATH 환경 변수에 경로를 추가하십시오. C : \ local \ boost_1_64_0 \ lib64-msvc-14.0입니다.

그런 다음 문제가 해결되었습니다. 참고 : 다른 관련 질문에서 일부 대답은 정적 라이브러리로 빌드를 제안 할 수 있습니다. 그러면 다른 가져 오기 오류가 발생합니다. DLL로드 실패 : % 1은 (는) 올바른 Win32 응용 프로그램이 아닙니다. 그래서 그냥 DLL로 빌드하십시오. 추신 : 당신은 boost_python-vc140-mt-1_64.lib 또는 boost_python-vc140-mt-gd-1_64.lib를 Property Pages-> Linker-> Input-> Additional Dependencies에 지정할 필요가 없습니다.

관련 문제