[Mono-devel-list] [patch]Patch DllNotFoundException triggered for missing unmanaged libraries
Denis Gervalle
dgl at softec.st
Wed Jun 2 13:04:23 EDT 2004
Peter Dennis Bartok wrote:
>Denis,
>
>I was under the impression that we already print the detailed error why a
>module could not be loaded if MONO_DEBUG is set. Gonzalo put that in
for me
>quite a while ago. Did I miss something?
>
Yes, Gonzalo has made one correction, but this one only partially report
the problem. In fact, to keep a good compatibility between Windows and
Linux, mono try to load up to 6 variations on the library name. Gonzalo
current correction only report the error provided by the latest tried
name. But, if a previous name succeed but failed on a library
dependancy, this is not shown, so it currently report
DllNotFoundException: sample.so, but a libsample.so may have been found
and failed on its dependencies.
Using name variations may also create a confusion, since for example,
./libsample.so is tried before sample.so, if both are available
(probably a poor name have been choosen), and both provide different
symbols as entry points, you may get a EntryPointNotFoundException
because the library loaded is not the one you expect. Moreover,
entrypoint symbol also use variations for Unicode/Ansi function, and
this may cause even more confusion. The patch provided address these
issues by providing a full report of all tried libraries, and also tried
symbols so you can quickly understand what is going on.
Taking my last example, using
[DllImport("libsample")]
extern mysymbol()
and a call to that function as the first function of that library
Under linux, with two library ./libsample.so not containing mysymbol and
/usr/lib/sample.so containing mysymbol (I admit, a really weird
situation), you will get an EntryPointNotFoundException and the
following message (if MONO_DEBUG is set):
Trying 'libsample.so': libsample.so: cannot open shared object file: No
such file or directory ==> Trying ./libsample.so: Found ==> Searching
function 'mysymbolA': 'mysymbolA': mono: undefined symbol: mysymbolA ==>
Searching function 'mysymbol': 'mysymbol': mono: undefined symbol: mysymbol
Hopes that this helps clarify all purposes of the patch.
Regards,
Denis Gervalle
SOFTEC sa
http://www.softec.st
More information about the Mono-devel-list
mailing list