Symbols { public Symbols(final Class<?> javaLibrary, final String[] symbols, final byte[] argumentSizes, final long[] ffiCallInterfaces, final String[] jniSignatures) { this.javaLibrary = javaLibrary; this.symbols = symbols; this.argumentSizes = argumentSizes; this.ffiCallInterfaces = ffiCallInterfaces; this.jniSignatures = jniSignatures; } Symbols(final Class<?> javaLibrary,
                   final String[] symbols,
                   final byte[] argumentSizes,
                   final long[] ffiCallInterfaces,
                   final String[] jniSignatures); void link(); void link(final String nativeLibraryPath);  }
@Test public void testSymbols() { final long readGlobalVarSymbol = Testing.readGlobalVar(); final Pointer<ReadGlobalVarFunc> readGlobalVarFuncPointer = wrap(ReadGlobalVarFunc.class, readGlobalVarSymbol); final long globalvarSymbol = Testing.globalvar(); final Pointer<Integer> globalVar = wrap(Integer.class, globalvarSymbol); final long writeGlobalVarSymbol = Testing.writeGlobalVar(); final Pointer<WriteGlobalVarFunc> writeGlobalVarFuncPointer = wrap(WriteGlobalVarFunc.class, writeGlobalVarSymbol); writeGlobalVarFuncPointer.get() .invoke(10); assertThat(readGlobalVarFuncPointer.get() .invoke()).isEqualTo(10); assertThat(globalVar.get()).isEqualTo(10); }