diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs index bb23fc1b56..d0e24c325c 100644 --- a/OpenSim/Data/SQLite/SQLiteAssetData.cs +++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs @@ -81,6 +81,9 @@ namespace OpenSim.Data.SQLite /// connect string override public void Initialise(string dbconnect) { + if (Util.IsWindows()) + Util.LoadArchSpecificWindowsDll("sqlite3.dll"); + if (dbconnect == string.Empty) { dbconnect = "URI=file:Asset.db,version=3"; diff --git a/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs b/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs index f51aa288d4..5120453d1b 100644 --- a/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs +++ b/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs @@ -65,6 +65,9 @@ namespace OpenSim.Data.SQLite if (!m_initialized) { + if (Util.IsWindows()) + Util.LoadArchSpecificWindowsDll("sqlite3.dll"); + m_Connection = new SqliteConnection(connectionString); m_Connection.Open(); diff --git a/OpenSim/Data/SQLite/SQLiteEstateData.cs b/OpenSim/Data/SQLite/SQLiteEstateData.cs index 8db9262e18..c042ba2bd3 100644 --- a/OpenSim/Data/SQLite/SQLiteEstateData.cs +++ b/OpenSim/Data/SQLite/SQLiteEstateData.cs @@ -69,6 +69,9 @@ namespace OpenSim.Data.SQLite public void Initialise(string connectionString) { + if (Util.IsWindows()) + Util.LoadArchSpecificWindowsDll("sqlite3.dll"); + m_connectionString = connectionString; m_log.Info("[ESTATE DB]: Sqlite - connecting: "+m_connectionString); diff --git a/OpenSim/Data/SQLite/SQLiteFramework.cs b/OpenSim/Data/SQLite/SQLiteFramework.cs index 4992bcc7de..159471723e 100644 --- a/OpenSim/Data/SQLite/SQLiteFramework.cs +++ b/OpenSim/Data/SQLite/SQLiteFramework.cs @@ -48,6 +48,8 @@ namespace OpenSim.Data.SQLite protected SQLiteFramework(string connectionString) { + if (Util.IsWindows()) + Util.LoadArchSpecificWindowsDll("sqlite3.dll"); } ////////////////////////////////////////////////////////////// diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs index 7dc07ec1ac..ccbd154b80 100644 --- a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs +++ b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs @@ -77,6 +77,9 @@ namespace OpenSim.Data.SQLite { m_Initialized = true; + if (Util.IsWindows()) + Util.LoadArchSpecificWindowsDll("sqlite3.dll"); + if (dbconnect == string.Empty) { dbconnect = "URI=file:inventoryStore.db,version=3"; diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs index 62951130d0..186a58622d 100644 --- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs +++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs @@ -110,6 +110,9 @@ namespace OpenSim.Data.SQLite { try { + if (Util.IsWindows()) + Util.LoadArchSpecificWindowsDll("sqlite3.dll"); + m_connectionString = connectionString; ds = new DataSet("Region"); diff --git a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs index 16f9046186..1f369867ce 100644 --- a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs +++ b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs @@ -52,6 +52,9 @@ namespace OpenSim.Data.SQLite public SQLiteXInventoryData(string conn, string realm) { + if (Util.IsWindows()) + Util.LoadArchSpecificWindowsDll("sqlite3.dll"); + m_Folders = new SQLiteGenericTableHandler( conn, "inventoryfolders", "XInventoryStore"); m_Items = new SqliteItemHandler( diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index b3ec5c2bf1..efa4a7ba87 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -392,6 +392,36 @@ namespace OpenSim.Framework || platformId == PlatformID.WinCE); } + public static bool LoadArchSpecificWindowsDll(string libraryName) + { + // We do this so that OpenSimulator on Windows loads the correct native library depending on whether + // it's running as a 32-bit process or a 64-bit one. By invoking LoadLibary here, later DLLImports + // will find it already loaded later on. + // + // This isn't necessary for other platforms (e.g. Mac OSX and Linux) since the DLL used can be + // controlled in config files. + string nativeLibraryPath; + + if (Util.Is64BitProcess()) + nativeLibraryPath = "lib64/" + libraryName; + else + nativeLibraryPath = "lib32/" + libraryName; + + m_log.DebugFormat("[UTIL]: Loading native Windows library at {0}", nativeLibraryPath); + + if (Util.LoadLibrary(nativeLibraryPath) == IntPtr.Zero) + { + m_log.ErrorFormat( + "[UTIL]: Couldn't find native Windows library at {0}", nativeLibraryPath); + + return false; + } + else + { + return true; + } + } + public static bool IsEnvironmentSupported(ref string reason) { // Must have .NET 2.0 (Generics / libsl) diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index e8bb476d57..478dd95b4e 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs @@ -66,20 +66,7 @@ namespace OpenSim.Region.Physics.OdePlugin // This isn't necessary for other platforms (e.g. Mac OSX and Linux) since the DLL used can be // controlled in Ode.NET.dll.config if (Util.IsWindows()) - { - string nativeLibraryPath; - - if (Util.Is64BitProcess()) - nativeLibraryPath = "lib64/ode.dll"; - else - nativeLibraryPath = "lib32/ode.dll"; - - m_log.DebugFormat("[ODE PLUGIN]: Loading native Windows ODE library at {0}", nativeLibraryPath); - - if (Util.LoadLibrary(nativeLibraryPath) == IntPtr.Zero) - m_log.ErrorFormat( - "[ODE PLUGIN]: Couldn't find native Windows ODE library at {0}", nativeLibraryPath); - } + Util.LoadArchSpecificWindowsDll("ode.dll"); // Initializing ODE only when a scene is created allows alternative ODE plugins to co-habit (according to // http://opensimulator.org/mantis/view.php?id=2750). diff --git a/bin/sqlite3.dll b/bin/lib32/sqlite3.dll similarity index 100% rename from bin/sqlite3.dll rename to bin/lib32/sqlite3.dll diff --git a/bin/lib64/sqlite3.dll b/bin/lib64/sqlite3.dll new file mode 100755 index 0000000000..dadf7dda9b Binary files /dev/null and b/bin/lib64/sqlite3.dll differ