Unhandled Exception: System.DllNotFoundException: wx-c

sandy의 이미지

우분투 굿시의 경우 mono + wx.NET 로 작성된 프로그램 실행의 경우에
/usr/lib/libwx-c.so /usr/lib/wx.NET.dll 파일이 버젓이 있는데도 불구하고
에러가 나는 경우 원인을 알수 없어 참 난처하지요.

s4ndy@s4ndy ~$ mezcal

Unhandled Exception: System.DllNotFoundException: wx-c
at (wrapper managed-to-native) wx.App:wxApp_ctor ()
at wx.App..ctor () [0x00000]
at Mezcal.MezcalForm+MezcalApp..ctor () [0x00000]
at Mezcal.MezcalForm+MezcalApp.Main () [0x00000]

s4ndy@s4ndy ~$ ls -al /usr/lib/libwx-c.so /usr/lib/wx.NET.dll
-r-xr-xr-x 1 1031 users 1451384 2005-05-30 00:33 /usr/lib/libwx-c.so
-r-xr-xr-x 1 1031 users 769536 2005-05-30 00:33 /usr/lib/wx.NET.dll

이럴땐 LD_DEBUG 을 활용하면 좋습니다.

LD_DEBUG=files mezcal

생략

8444: file=libz.so.1 [0]; needed by /usr/lib/libwx_gtk2u_xrc-2.6.so.0 [0]
8444: file=libz.so.1 [0]; generating link map
8444: dynamic: 0xb649c308 base: 0xb6488000 size: 0x00014520
8444: entry: 0xb6489910 phdr: 0xb6488034 phnum: 5
8444:
8444:
8444: file=libjpeg.so.62 [0]; needed by /usr/lib/libwx_gtk2u_xrc-2.6.so.0 [0]
8444: file=libjpeg.so.62 [0]; generating link map
8444: dynamic: 0xb6487238 base: 0xb6468000 size: 0x0001f498
8444: entry: 0xb646a6b0 phdr: 0xb6468034 phnum: 4
8444:
8444:
8444: file=libtiff.so.3 [0]; needed by /usr/lib/libwx_gtk2u_xrc-2.6.so.0 [0]

생략

위에서 본것처럼 각각의 wxWidgets 라이브러리가 사용하는 의존 라이브러리가 존재하면
해당 라이브러리의 link map 을 보여주지만 없는 경우 보여주지 못하죠.

libtiff.so.3 의 경우 링크맵을 못보여 주는걸로 봐서
파일이 없을걸로 짐작할수 있습니다.
확인해보죠

s4ndy@s4ndy $ ls -al /usr/lib/libtiff.so.3
ls: /usr/lib/libtiff.so.3: No such file or directory

ㅋㅋ 없네요.이 파일이 문제 였던겁니다.

s4ndy@s4ndy $ ls -al /usr/lib/libtiff.so*
lrwxrwxrwx 1 root root 16 2007-10-06 22:07 /usr/lib/libtiff.so -> libtiff.so.4.2.1
lrwxrwxrwx 1 root root 16 2007-10-06 22:07 /usr/lib/libtiff.so.4 -> libtiff.so.4.2.1
-rw-r--r-- 1 root root 343864 2007-10-05 22:28 /usr/lib/libtiff.so.4.2.1

시스템에 있는 /usr/lib/libtiff.so.4.2.1 파일을 libtiff.so.3 로 심볼릭 링크를 걸어줍니다.

s4ndy@s4ndy $ sudo ln -s /usr/lib/libtiff.so.4.2.1 /usr/lib/libtiff.so.3

이제 이 모노 프로그램을 실행해 보면 잘 작동합니다.

s4ndy@s4ndy ~$ mezcal