라이브러리 킬!
윈도 XP 쓰면서 기괴한 문제에 시달리고 있습니다. 노트북을 쓰고 있는데, 과거 약 반 년 전에 데스크탑 쓸 때도 가끔 일어나던 문제입니다.
멀쩡히 잘 되던 프로그램이 어느 날 컴퓨터를 시동하고 켜려고 하니 Segmentation fault("이 프로그램에서 잘못된 연산을 수행하여 종료됩니다. 문제가 지속되면…")를 일으키며 죽습니다. 이때 프로그램을 제거하고 다시 설치하면 잘 동작하기도 합니다. 어쨌든 최근까지 그런 문제가 발생한 프로그램은 그냥 포기하고 봉인하고 대안 프로그램을 찾아서 쓰다가, 오늘 한번 수리에 도전해 보았습니다.
먼저 세그폴트가 발생했을 때 뜨는 오류 대화상자에서 '자세히'를 눌러 보니, 어떤 라이브러리 파일에서 문제가 일어났다는 말이 나옵니다. 그래서 일단 가장 무식한 접근으로, Search로 이 파일을 찾아서, 파일 이름을 바꿔버리고, 프로그램을 다시 실행해 봤습니다.
됩니다.
…………………………………
…………………………………
…………………………………
세그폴트가 나던 다른 프로그램을 실행시켜 봤습니다. 역시 어떤 라이브러리 파일이 문제를 일으키고 있습니다. 파일을 찾아서 이름을 바꾸었습니다. 일단 실행이 됩니다. 계속 사용해 봤습니다. 어떤 단계에서 또 세그폴트를 내며 죽습니다. 다시 찾아보니 아까 이름을 바꿔버린 그 파일이 새로 생성이 되어 있습니다. 또 이름을 바꾸고 프로그램을 동작시킨 뒤, 아까 죽은 그 단계 직전에서 다시 폴더를 뒤져 보니 또 그 파일이 생성이 되어 있습니다. 이젠 지워-_버리고 진행하니, 프로그램은 멀쩡하게 앞 단계로 나아갑니다.
그래서 그 파일의 절대 주소를 가지고 계속해서 도스 프롬프트로 del 명령을 시도하는 스크립트를 만든 뒤 프로그램을 사용해 봤습니다.
잘 됩니다.
………
………
………
문제 자체는 임시방편으로나마 해결이 되었으니 문제 해결을 요청하는 글은 아니고, 이런 이야기를 해봅시다.
윈도의 세계는 오묘합니다. exe 파일을 실행하면 파일을 통째로 메모리에 올리지 않고 쪼개서 일부분씩 올리면서 실행한다든가(…) 웹 페이지에서 개별 컴퓨터의 프로세스를 다 제어할 수 있는 API를 제공한다든가(…) 윈도의 오묘한 점, 모아봅시다(…)
댓글
바이러스 아닌가요?
바이러스 아닌가요? ;;
-----------------
한글을 사랑합니다.
-----------------
한글을 사랑합니다.
요즘 인터넷
요즘 인터넷 익스플로어는 웹브라우져가 아니라 엑스티브엑스 설치기 같아요.
<- 이거면 안되는 게 없어~
정품 소프트웨어 사용 캠패인
<- 이거면 안 되는 게 없어~
정품 소프트웨어 사용 캠패인
윈도우에서 dll 은
윈도우에서 dll 은 공유 라이브러리 이고 이것들의 중요성을 의식 해서 설치시 원본을 C:\WINDOWS\system32\dllcache 에
하나더 저장해 둡니다. 그리고 system32 의 dll 들이 손상이 되었다고 판단(?) 되면 원본 dll 을 가져다가 덮어 써 버립니다.
dllcache 에 있는 dll 을 먼저 삭제하고 system32 의 dll 을 삭제해 보세요.
아마도 이런 루틴이 가능 하기는 할텐데. 그냥은 안될지도 모르겠네요. ;
예전엔... 어떻게 어떻게 변칙적으로 했었는데... 기억이 가물가물 하네요..
암튼. 원본이 있어서 복사본이 수정이나. 삭제가 되었다고 판단(?) 되면 덮어 써 버리는 루틴으로 되어 있습니다.
흠..
CD를 넣으라고 요구할지도 모릅니다.
-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===
안전모드나 도스부팅
안전모드나 도스 커맨드로 부팅하기전에는 완벽하게는 안되던 기억이 있습니다.
보통 설치 프로그램도 부팅되는 시점에 제거작업을 하도록 했던 것 같군요.
대체로 그런 공용 DLL들은 하위호환성을 유지하기는 합니다. 때문에 대부분의 DLL Hell은 최신의 DLL로 갱신하면 해결되곤 하지요.
하지만, 몇몇의 APP가 특정 버전을 요구하는 경우가 있어 확답하지는 못하겠네요.
그 라이브러리가 포함되어 있을만한 최신의 프로그램을 한번 설치해보시던지,
아니면 안전모드나, 도스 커맨드 모드로 부팅하셔서 gbkwon님 말씀처럼 dllcache에 있는 것 까지 완벽하게 지워보셔요.
May The Force Be With You.
May The Force Be With You.
댓글 달기