mirror of
				https://github.com/xerial/snappy-java.git
				synced 2025-10-31 19:45:34 +01:00 
			
		
		
		
	Edit documentation
This commit is contained in:
		
							parent
							
								
									073ac31424
								
							
						
					
					
						commit
						244e2183b6
					
				
							
								
								
									
										36
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								INSTALL
									
									
									
									
									
								
							| @ -1,19 +1,29 @@ | ||||
| [Installation note of snappy-java] | ||||
| 
 | ||||
| = Required libraries for building snappy-java = | ||||
| If your OS platform is one of the Windows/Linux/Mac OS X (32/64 bit Intel CPUs), the installation process described here is unnecessary. Simply put snappy-java-(version).jar to your Java classpath. If your OS is not in the above list, create your own snappy-java-(version).jar file as follows.  | ||||
| 
 | ||||
| = Required tools for building snappy-java = | ||||
| 
 | ||||
| [For all platforms] | ||||
| 
 | ||||
| * Java 6 (JDK1.6) http://java.sun.com/ | ||||
|  - set JAVA_HOME environment variable to the Java installation folder (e.g. JAVA_HOME=C:/Program Files/Java/jdk1.6.0_24 in Windows) | ||||
| * Maven 3.x http://maven.apache.org/ | ||||
|  - Check mvn command can be run from your command line. | ||||
|  - Check mvn command can be used from your command line. | ||||
| 
 | ||||
| [Windows (32-bit)] | ||||
| [Windows (32/64-bit)] | ||||
| * GNU make  | ||||
| * And also tar, curl, cp, rm, grep commands are needed. (I use Cygwin for building snappy-java in Windows) | ||||
| 
 | ||||
| [Windows (64-bit)] | ||||
| [Windows (32-bit only)] | ||||
| * Install MinGW http://www.mingw.org/ | ||||
| * Set PATH to the following command in MinGW package | ||||
|  - mingw32-g++ | ||||
|  - strip | ||||
| 
 | ||||
| To build x86 (32bit) dll under 64-bit Windows, use "make win32" target. | ||||
| 
 | ||||
| [Windows (64-bit only)] | ||||
| * Download MinGW-w64 http://sourceforge.net/projects/mingw-w64/  | ||||
| * Set PATH to the following commands in the downloaded archive:  | ||||
|  - x86_64-w64-mingw32-g++ | ||||
| @ -21,22 +31,13 @@ | ||||
| 
 | ||||
| NOTICE: Do not use the Cygwin version of MinGW-w64. It fails to build assemblies for 64bit environment. | ||||
| 
 | ||||
| [Windows (32-bit)] | ||||
| * Install MinGW http://www.mingw.org/ | ||||
| * Set PATH to the following command in MinGW package | ||||
|  - mingw32-g++ | ||||
|  - strip | ||||
| 
 | ||||
| To build x86 (32bit) dll using 64-bit Windows, use "make win32" target. | ||||
| 
 | ||||
| [Linux (32/64-bit)] | ||||
| * gcc-4.5.x or higher is necessary because snappy-java uses -static-libstdc++ option.  | ||||
| 
 | ||||
| * You can build 32-bit native library with 64-bit Linux machine (do make linux32) | ||||
| 
 | ||||
| [Mac] | ||||
| * Install gcc, make, etc. included in Mac OS X install disk. (X Code) | ||||
| * Install mercurial using Mac Porsts http://www.macports.org/ | ||||
| 
 | ||||
| * Install mercurial using Mac Ports http://www.macports.org/ | ||||
| 
 | ||||
| = Building snappy-java = | ||||
| 
 | ||||
| @ -45,9 +46,10 @@ $ make | ||||
| 
 | ||||
| A native library for your machine environment and a jar package target/snappy-java-(version).jar are produced in the target folder. | ||||
| 
 | ||||
| = Building native library =  | ||||
| = Building only the native library =  | ||||
| $ make native | ||||
| 
 | ||||
| = Rebuild native library = | ||||
| = Rebuild the native library for your platform = | ||||
| $ make clean-native native | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -58,7 +58,7 @@ NATIVE_DLL:=$(NATIVE_DIR)/$(LIBNAME) | ||||
| snappy-jar-version:=snappy-java-$(shell $(JAVA) -jar lib/silk-weaver.jar find 'project(artifactId, version)' pom.xml | grep snappy-java | awk '{ print $$2; }') | ||||
| 
 | ||||
| native: $(SNAPPY_UNPACKED) $(NATIVE_DLL)  | ||||
| snappy: $(TARGET)/$(snappy-jar-version).jar | ||||
| snappy: native $(TARGET)/$(snappy-jar-version).jar | ||||
| 
 | ||||
| $(NATIVE_DLL): $(SNAPPY_OUT)/$(LIBNAME)  | ||||
| 	@mkdir -p $(@D) | ||||
|  | ||||
| @ -23,7 +23,7 @@ OS_NAME := $(shell $(JAVA) -cp lib $(OSINFO_CLASS) --os) | ||||
| OS_ARCH := $(shell $(JAVA) -cp lib $(OSINFO_CLASS) --arch) | ||||
| LIB_FOLDER := $(shell $(JAVA) -cp lib $(OSINFO_CLASS)) | ||||
| 
 | ||||
| # Windows uses different path separators, because they hate me
 | ||||
| # Windows uses different path separators
 | ||||
| ifeq ($(OS_NAME),Windows) | ||||
| 	sep := ; | ||||
| else | ||||
| @ -50,7 +50,7 @@ endif | ||||
| 
 | ||||
| Default_CXX          := g++ | ||||
| Default_STRIP        := strip | ||||
| Default_CXXFLAGS     := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC | ||||
| Default_CXXFLAGS     := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden | ||||
| Default_LINKFLAGS    := -shared -static | ||||
| Default_LIBNAME      := libsnappyjava.so | ||||
| Default_SNAPPY_FLAGS :=  | ||||
|  | ||||
							
								
								
									
										5
									
								
								lib/include/config.h
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										5
									
								
								lib/include/config.h
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @ -0,0 +1,5 @@ | ||||
| 
 | ||||
| #ifndef __CONFIG_H | ||||
| #define __CONFIG_H | ||||
| 
 | ||||
| #endif // __CONFIG_H
 | ||||
| @ -124,21 +124,22 @@ public class SnappyLoader | ||||
|                 try { | ||||
|                     // Load a byte code  | ||||
|                     byte[] byteCode = getByteCode("/org/xerial/snappy/SnappyNativeLoader.bytecode"); | ||||
|                     // In addition, load the SnappyNative and SnappyException class in the system class loader | ||||
|                     // In addition, we need to load the other dependent classes (e.g., SnappyNative and SnappyException) using the system class loader | ||||
|                     List<byte[]> preloadClassByteCode = new ArrayList<byte[]>(classesToPreload.length); | ||||
|                     for (String each : classesToPreload) { | ||||
|                         preloadClassByteCode.add(getByteCode(String.format("/%s.class", each.replaceAll("\\.", "/")))); | ||||
|                     } | ||||
| 
 | ||||
|                     // Create a new class to the system class loader | ||||
|                     // Create a new class from a byte code | ||||
|                     Class< ? > classLoader = Class.forName("java.lang.ClassLoader"); | ||||
|                     Method defineClass = classLoader.getDeclaredMethod("defineClass", new Class[] { String.class, | ||||
|                             byte[].class, int.class, int.class, ProtectionDomain.class }); | ||||
| 
 | ||||
|                     ClassLoader systemClassLoader = getSystemClassLoader(); | ||||
|                     // ClassLoader.defineClass is a protected method, so we have to make it accessible | ||||
|                     defineClass.setAccessible(true); | ||||
|                     try { | ||||
|                         // Load SnappyNativeLoader | ||||
|                         // Create a new class using a ClassLoader#defineClass | ||||
|                         defineClass.invoke(systemClassLoader, nativeLoaderClassName, byteCode, 0, byteCode.length, | ||||
|                                 System.class.getProtectionDomain()); | ||||
| 
 | ||||
| @ -149,16 +150,18 @@ public class SnappyLoader | ||||
|                         } | ||||
|                     } | ||||
|                     finally { | ||||
|                         // Reset the accessibility to defineClass method | ||||
|                         defineClass.setAccessible(false); | ||||
|                     } | ||||
| 
 | ||||
|                     // Load the loader class | ||||
|                     // Load the snappy loader class | ||||
|                     Class< ? > loaderClass = systemClassLoader.loadClass(nativeLoaderClassName); | ||||
|                     if (loaderClass != null) { | ||||
|                         Method loadMethod = loaderClass.getDeclaredMethod("load", new Class[] { String.class }); | ||||
|                         File nativeLib = findNativeLibrary(); | ||||
|                         loadMethod.invoke(null, nativeLib.getAbsolutePath()); | ||||
| 
 | ||||
|                         // And also, preload the other dependent classes  | ||||
|                         for (String each : classesToPreload) { | ||||
|                             systemClassLoader.loadClass(each); | ||||
|                         } | ||||
| @ -167,7 +170,7 @@ public class SnappyLoader | ||||
|                     } | ||||
|                 } | ||||
|                 catch (Exception e2) { | ||||
|                     e.printStackTrace(); | ||||
|                     e2.printStackTrace(); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|  | ||||
| @ -64,7 +64,7 @@ public class SnappyLoaderTest | ||||
| 
 | ||||
|         ProtectionDomain systemPD = System.class.getProtectionDomain(); | ||||
|         byte[] bytecode = cl.toBytecode(); | ||||
|         //        FileOutputStream f = new FileOutputStream("src/main/java/org/xerial/snappy/SnappyNativeLoader.bytecode"); | ||||
|         //        FileOutputStream f = new FileOutputStream("src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode"); | ||||
|         //        f.write(bytecode); | ||||
|         //        f.close(); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user