파이썬에서 ctypes를 사용할 때 발생하는 에러 .

조회수 4832회

.so 파일이든, .dll 파일이든 불러오기만 하려고 하면 (경로를 다 적어주어도, 폴더 내에 그냥 바로 넣고 불러오려고 해도)

" [WinError 193] %1은(는) 올바른 Win32 응용 프로그램이 아닙니다 " 라는 에러가 계속 뜹니다.

검색을 계속 해보니 버전이 안맞는 것 같다고 하는데

anaconda는 64비트고 print(ctypes.windll.kernel32)로는 이렇게 출력이 나지만 print(ctypes.windll.kernel64)는 'OSError: [WinError 126] 지정된 모듈을 찾을 수 없습니다' 이런 에러가 나옵니다.

혹시나 싶어 파이썬 2.x버전에서(32비트) 다시 시도를 해봤지만

Traceback (most recent call last): File "", line 1, in File "C:\Python27\lib\ctypes_init.py", line 366, in __init_ self._handle = _dlopen(self._name, mode) WindowsError: [Error 126]

여기 역시 이런 에러가 똑같이 계속 나옵니다.

어떻게 해결하는 실마리를 찾아야 할지 모르겠습니다..

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    python이 그래서 어렵습니다.

    잘하려면 결국 시스템 이해가 필수가 됩니다. 차라리 자바면 대부분 자바로 라이브러리를 개발하니까 이런 시스템 지식이 없어도 됩니다만 파이썬은 확장모듈을 많이 사용하므로 순수 python 오류가 아닌 경우에 트러블슈팅하기가 어렵게됩니다.

    본문과 같은 오류가 발생할 수 있는 경우는 다양합니다.

    본문에서 얻을 수 있는 정보는 사용하는 os는 윈도우 64이며 python 인터프리터도 64비트를 사용한다는 겁니다.

    윈도우에서 dll 은 같은 아키텍쳐만 호출이 가능합니다. 64비트 python은 64비트로 컴파일된 dll만 호출할 수 있다는 이야깁니다. 32비트면 32비트 dll만 가능하겠죠. 그런점을 고려해서 생각해 볼 때 dll 호출자체는 잘못되지 않았을 것 같습니다.

    문제는 호출하려는 dll 이 온전한 것인가를 판단할 수 있어야 합니다. 이럴때 시스템 관련 지식이 필요한겁니다. pe format 지식이 있으면 더 좋겠구요.

    글이 길어졌는데 dll정보를 볼 수 있다면 파악해서 알려주시고 볼 수 없다면 호출하려는 dll을 올려주세요. 구글드라이브나 github 같이 공유할 수 있는 곳에 올리면 되겠지요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)