@@ -5,6 +5,7 @@ module Util.DynamicLinker where
55
66import Foreign.LibFFI
77import Foreign.Ptr (nullPtr, FunPtr, nullFunPtr,castPtrToFunPtr)
8+import System.Directory
89#ifndef WINDOWS
910import System.Posix.DynamicLinker
1011#else
@@ -32,7 +33,9 @@ data DynamicLib = Lib { lib_name :: String
3233
3334#ifndef WINDOWS
3435tryLoadLib :: String -> IO (Maybe DynamicLib)
35−tryLoadLib lib = do handle <- dlopen (lib ++ "." ++ hostDynamicLibExt) [RTLD_NOW]
36+tryLoadLib lib = do exactName <- doesFileExist lib
37+ let filename = if exactName then lib else lib ++ "." ++ hostDynamicLibExt
38+ handle <- dlopen filename [RTLD_NOW]
3639 if undl handle == nullPtr
3740 then return Nothing
3841 else return . Just $ Lib lib handle
@@ -45,7 +48,9 @@ tryLoadFn fn (Lib _ h) = do cFn <- dlsym h fn
4548 else return . Just $ Fun fn cFn
4649#else
4750tryLoadLib :: String -> IO (Maybe DynamicLib)
48−tryLoadLib lib = do handle <- loadLibrary (lib ++ "." ++ hostDynamicLibExt)
51+tryLoadLib lib = do exactName <- doesFileExist lib
52+ let filename = if exactName then lib else lib ++ "." ++ hostDynamicLibExt
53+ handle <- loadLibrary filename
4954 if handle == nullPtr
5055 then return Nothing
5156 else return . Just $ Lib lib handle