Let's have a native library without a "lib" prefix, for example, taken from a framework. A good example would be "QtGui" from Qt. Let's try to P/Invoke it. As you know, Mono's dynamic loader starts enumerating combinations by using different paths, prefixes and extensions until it finds the desired library. The problem is that a particular valid combination is never attempted. This is the combination full path to the executable + no prefix + lib name + no extension. In other words, this path:
is never tried, unlike:
This makes Mono unable to load the library and leads to crashes. It has to be worked around by deliberately setting a "lib" prefix to the name of the library.