Post

jextract on libappindicator

Introduction

I was always fascinated by the possibility to use a library written in C from Java. The functionality of the library is available to your Java code then, without the need to re-implement the wheel.

With Project Panama and the jextract tool you can generate Java bindings directly from the header files of the C library of interest.

Let’s see this in practice.

Configuring jextract

jextract was developed with, but later excluded from Project Panama, so you need to acquire jextract and add it to your JDK.

jextract is available as a pre-build binary from the official website. Download the version that matches your JDK version.

The binaries need to be added to your path:

1
export PATH=$HOME/Downloads/openjdk-20-jextract+1-2_linux-x64_bin/jextract-20/bin:$PATH

And the executables need to be marked executable:

1
2
cd $HOME/Downloads/openjdk-20-jextract+1-2_linux-x64_bin/jextract-20/bin
chmod 0755 *

Generate Java bindings for libappindicator

Generating the Java bindings for libappindicator is straight forward. As it depends on a couple of shared libraries, it’s necessary to reference all of them. Otherwise, the command will fail:

1
2
3
4
5
6
7
8
9
10
11
jextract --source \
	-t org.purejava.linux \
	-I /usr/include/gtk-3.0/ \
	-I /usr/include/glib-2.0/ \
	-I /usr/include/cairo/ \
	-I /usr/include/gdk-pixbuf-2.0/ \
	-I /usr/include/pango-1.0/ \
	-I /usr/include/atk-1.0/ \
	-I /usr/include/harfbuzz/ \
	-I /usr/lib/glib-2.0/include/ \
	/usr/include/libappindicator3-0.1/libappindicator/app-indicator.h
This post is licensed under CC BY 4.0 by the author.

Trending Tags