BridJ (BSD-licensed) is an innovative native bindings library that lets Java programmers use native libraries (written in C, C++, ObjectiveC and more) in a very natural way (inspired by the great JNA, with better performance, C++ and generics added).

Huge thanks to BridJ’s contributors and bug reporters who made that version possible!

Here’s a summary of the changes since version 0.6.2 (see full CHANGELOG):

  • Added LRU pointer cache (disable with -Dbridj.cache.pointers=false or BRIDJ_CACHE_POINTERS=0), which helps keep short-lived pointer garbage to a minimum for some use cases (see issue nativelibs4java#440)
  • Added experimental support for Raspberry Pi (Linux/armhf, hard-float ABI).
  • Added a new all-in-one android release zip with classes JAR (now contains no native lib), native libs, sources & javadoc.
  • Added programmatic setting of library dependencies: BridJ.addNativeLibraryDependencies (issue nativelibs4java#424), -Dbridj.Xyz.dependencies=Abc,Def and BRIDJ_XYZ_DEPENDENCIES=Abc,Def (issue #391)
  • Added a very useful BRIDJ_DEBUG_POINTER_RELEASES=1 / -Dbridj.debug.pointer.releases=true mode that helps track double releases (also enabled when BRIDJ_DEBUG_POINTERS=1 / -Dbridj.debug.pointers=true).
  • Added Pointer.pointerToAddress(peer, size, io, release)
  • Added fallback to GCC demangler for mingw32 on Windows (issue nativelibs4java#356).
  • Added support for exact library file name (issue nativelibs4java#424)
  • Added Pointer.pointerTo(IntValuedEnum) ([issue nativelibs4java#414](
  • Added support for C++ namespaces (issue nativelibs4java#446)
  • Added support for @Name annotations on structs and enums (allows refactoring of such classes, issue nativelibs4java#443)
  • Added support for new JNAerator-generated crossed callbacks (one with an object-heavy signature, and one with raw types, each calling the other, one of the two being overridden)
  • Dropped C# runtime stubs
  • Dropped linux-only and mac-only packages.
  • Improved performance of all operations of Pointers with bounds (~ 25% faster).
  • Improved concurrency of callbacks and structs creation.
  • Improved logs (issue nativelibs4java#328, issue nativelibs4java#346).
  • Improved C++ templates (still WIP, std::list protoype and fixed std::vector)
  • Improved Grails integration with Platform.getClassLoader change (issue nativelibs4java#431)
  • Improved PointerIO caching.
  • Refactored StructIO (split out description of struct and its fields as top-level entities, StructIO now just does IO). This is what justifies version bump.
  • Rebuilt Linux binaries with –hash-style=both for better backwards compatibility (issue nativelibs4java#436)
  • Rebuilt Linux binaries with -z noexecstack
  • Rebuilt Unix libraries with -fno-stack-protector, and force GLIBC dependency down to 2.3.4 (issue nativelibs4java#467)
  • Rebuilt Solaris binaries with statically linked libgcc (issue nativelibs4java#452)
  • Fixed C++ demangling of int vs. pointer (issue nativelibs4java#482)
  • Fixed bit fields in structs! (issue nativelibs4java#496)
  • Fixed Windows c library alias: “msvcrt”, not “mscvrt” (issue nativelibs4java#492, thanks to @rkraneis for the patch!)
  • Fixed multithreading crashes due to strerror (issue nativelibs4java#450)
  • Fixed @Alignment annotation
  • Fixed demangling of pointer types (now stricter matching of target types, with support for callbacks).
  • Fixed support for Android/arm: artifact of last two releases lacked the binary, and had to move android libs from lib/ to libs/ (issue nativelibs4java#382)
  • Fixed usage of local refs in getLibrarySymbols to avoid reaching Dalvik’s limit (issue nativelibs4java#376)
  • Fixed openjdk library path (take it from sun.boot.library.path)
  • Fixed VARIANT memory management: use VariantInit and VariantClear + allocate it (and other structs tagged with COMRuntime) with CoTaskMemAlloc (see issue nativelibs4java#389)
  • Fixed typo in EllipsisHelper that broke some varargs
  • Fixed loading of dependent libraries on Windows using LoadLibraryEx + LOAD_WITH_ALTERED_PATH (issue nativelibs4java#378)
  • Fixed binding of c library on windows
  • Fixed pointerToCStrings: don’t update string array (might be causing / aggravating #397)
  • Fixed native library lookup logic (issue nativelibs4java#406)
  • Fixed NPE in DefaultParameterizedType.hashCode (issue nativelibs4java#411)
  • Fixed handling of @Name when demangler goes nuts (issue nativelibs4java#413)
  • Fixed FlagSet.toString() and had FlagSet.fromValue(int, E[]) to return raw enum when possible instead of always a FlagSet (issue nativelibs4java#414)
  • Fixed alignment on 32-bit linux (issue nativelibs4java#320)
  • Fixed warnings about missing vtables for COM objects (issue nativelibs4java#355)
  • Fixed disappearing MFC & STL classes in artifacts (issue nativelibs4java#392)
  • Fixed some GCC demangling shortcut cases like repeated const pointers.
  • Documented effects of protected mode (issue nativelibs4java#394)
  • Documented DefaultParameterizedType.paramType (see issue nativelibs4java#418) …

Special thanks to the users, contributors and bug reporters that helped getting this version out !

You can contribute to the project by reporting bugs here and joining the NativeLibs4Java Community.

Wait no longer : download and use BridJ now !