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