BridJ 0.7.0 released: experimental Android & RPi support, tons of fixes!
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](https://github.com/nativelibs4java/nativelibs4java/issues/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 !