GNU/Linux 환경에서 Wine을 기반으로 데이터베이스나 매크로를 실행하려고 할 때 예상치 못한 오류 메시지를 만나는 경우가 종종 있습니다. 프로그램 실행 도중 어느 시점에 OLE 오류 8004013F 대화상자가 나타나면서 스크립트가 곧바로 중단되는데, 이는 스크립트 실행에 필요한 라이브러리가 누락되었기 때문일 가능성이 큽니다. 네이티브 Windows 클라이언트에서는 이러한 라이브러리가 파일 내부의 개체와 부모 호스트를 서로 연결하는 역할을 담당합니다. 반면 리눅스에는 이런 기능이 없습니다. X 서버에서 실행되는 각 프로그램이 저마다 자신만의 방식으로 작업을 처리하기 때문입니다.
네이티브 Microsoft Windows 환경이라면 Delphi에서 소량의 코드만으로 Excel을 열 수 있습니다. 포함(embedded) 및 연결(linked)된 Excel 인스턴스를 통해 다양한 개체를 다루려면 eclApp:=CreateOleObject('Excel.Application'); 구문을 사용했을 것입니다. 리눅스에서도 같은 방식으로 OpenOffice를 활용해 본 경험이 있을 수 있습니다. 만약 eclApp:=CreateOleObject('com.sun.star.ServiceManager'); 코드로 OLE 개체를 생성하려다 Delphi가 악명 높은 8004013F 오류를 반환한다면, 역시 동일한 의존성 문제를 겪고 있는 것입니다.
무엇보다 먼저 코드에 오타가 없는지 꼼꼼히 확인하세요. 의존성 문제보다 오타가 오류의 가장 흔한 원인입니다. 모든 코드가 정확하게 작성되었음을 확인한 뒤에야 필요한 라이브러리 복구 작업으로 넘어가는 것이 올바른 순서입니다.
필요한 OLE 라이브러리
keynote-nf라는 윈도우용 노트 정리(organizer) 애플리케이션을 사용하려다 같은 오류를 경험할 수도 있는데, 이 경우에도 동일한 절차로 문제를 해결할 수 있습니다. keynote.exe 파일은 별도의 설치 프로그램 없이 배포되므로 보통 Program Files 디렉터리에 직접 복사해서 사용합니다. 파일이 일단 실행되더라도 앞서 언급한 8004013F 오류 또는 80004001 예외가 발생할 수 있습니다. 어느 쪽이든 mkdir 명령어나 그래픽 파일 관리자를 통해 Program Files 안에 'KeyNote-NF'라는 이름의 폴더를 만들고 keynote.exe 바이너리를 그곳으로 옮깁니다.
Windows XP, Vista, 7, 8, 8.1 또는 10 파티션에 접근할 수 있다면 C:\Windows\system32\ 폴더에서 msftedit.dll 파일을 복사해 앞서 만든 KeyNote-NF 폴더에 넣어 보세요. msls31.dll 파일도 함께 복사해야 합니다. 두 파일 모두 설치 CD에서 가져올 수도 있지만, 이 경우 expand 명령어로 압축을 풀어야 합니다. 어느 방법이든 파일을 준비한 뒤 프로그램을 실행하면 정상적으로 작동하는 것을 확인할 수 있을 것입니다.
DOS 실행 파일 경고는 무시해도 됩니다
Thunar, Nautilus 등 유사한 파일 관리자들은 keynote.exe를 DOS 실행 파일로 인식하지만, 이 경고는 무시해도 안전합니다. 기존과 같은 방식으로 실행하면 됩니다. 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴를 열면 'Wine으로 실행' 옵션이 나타나는 경우가 많은데, 이 옵션을 선택해 프로그램을 시작하면 됩니다.
터미널에서 프로그램을 실행하면 진행 과정에서 발생할 수 있는 오류 메시지를 직접 확인할 수 있다는 장점이 있습니다. 경우에 따라 msftedit.dll이나 msls31.dll이 아닌 다른 파일 이름에 대한 경고가 표시될 수 있는데, 그럴 때는 해당 파일을 대신 확보하면 됩니다. Unix 의존성 토끼굴에 빠진 것처럼 여러 파일을 모으느라 시간을 꽤 들일 수도 있지만, 차근차근 진행하면 됩니다.
Excel·Delphi 코드 문제 해결하기
Excel이나 Delphi 코드에서 같은 문제가 발생한다면, 실행하려는 실행 파일이 위치한 디렉터리로 이동해 두 개의 동적 연결 라이브러리(DLL) 파일을 해당 폴더에 넣으세요. ~/.wine/drive_c/Windows/system32에 넣으면 Wine이 완전히 접근할 수 있지만, 이는 Wine이 기본으로 설치한 일부 파일을 덮어쓸 위험이 있으니 주의해야 합니다.
이 DLL들은 Wine이 사용하는 오픈소스 대체재보다 어떤 면에서 더 우수하기 때문에, 다른 프로그램에서 개체를 연결하는 데도 도움이 됩니다. 하지만 많은 사용자는 클로즈드 소스 파일로 리눅스 환경을 오염시키는 것을 꺼립니다. 따라서 프로그램이 실제로 사용하는 디렉터리에만 배치하는 것이 가장 깔끔한 해결책입니다.
다른 파티션에서 복사해 온 실제 Windows 보조프로그램을 위한 전용 디렉터리를 만들어 관리할 수도 있습니다. 예컨대 bash 스크립트나 Delphi 코드로 기존 WordPad 인스턴스를 실행할 때 이런 문제를 겪는 사용자들이 많습니다. Wine이 자체 버전의 write.exe를 설치했더라도, "~/.wine/drive_c/Program Files/" 안에 새 디렉터리를 만들어 write.exe, msftedit.dll, msls31.dll을 함께 넣고 코드에서 그 디렉터리를 참조하면 됩니다.
Wine에는 Microsoft Windows NT의 cmd 인터프리터 원시 버전도 포함되어 있으므로, 원한다면 배치(Batch) 스크립트 파일에서 이러한 프로그램들을 참조할 수도 있습니다. 이때 반드시 @ECHO OFF를 먼저 선언하세요. 그렇지 않으면 각 명령어가 마치 명령줄에 하나씩 입력하고 엔터를 누른 것처럼 화면에 그대로 표시됩니다.
DLL 다운로드 시 주의사항
인터넷상의 많은 사이트가 DLL 파일을 다운로드 형태로 제공하며, 다른 파티션에 Windows 설치본이 없다면 이런 저장소를 이용하고 싶어질 수 있습니다. 물론 편리하기는 하지만, 이런 방식으로 msftedit.dll과 msls31.dll을 구해야 한다면 반드시 악성코드 검사를 먼저 거쳐야 합니다. 이런 비공식 저장소를 Ubuntu, Debian, Fedora 프로젝트가 운영하는 공식 저장소만큼 신뢰해서는 안 됩니다.
또한 이런 방식으로 파일을 구할 수밖에 없었다면, 코드를 재배포할 때 라이선스 문제가 생길 수 있다는 점도 유념해야 합니다. 이런 저장소가 요청하는 실행 파일은 절대 설치하지 마세요. 대부분 실제 공식 Microsoft Windows 소프트웨어 환경의 사용자를 노리는 애드웨어인 경우가 많습니다. 이 두 파일 외에 추가 라이브러리를 다운로드해야 하는 경우에도 동일한 애드웨어 감염 위험에 노출될 수 있으므로 각별한 주의가 필요합니다.
작성자 소개

Kevin Arrows
Kevin Arrows는 10년 이상의 업계 경력을 지닌 베테랑 기술 전문가로, MCTS(Microsoft Certified Technology Specialist) 자격증을 보유하고 있습니다. 최신 기술 동향을 꾸준히 학습하는 것을 즐기며, 소프트웨어 개발, 사이버 보안, 클라우드 컴퓨팅 등 폭넓은 분야에서 방대한 글을 집필해 왔습니다. 복잡한 기술 개념을 명확하고 간결하게 설명하는 능력으로 동료들에게 폭넓은 인정을 받고 있으며, 기술 분야에 대한 기여는 업계에서 높은 평가를 받고 있습니다.