Я не использовал gcj для компиляции в собственный исполняемый файл, но для взаимодействия с нативными библиотеками я обнаружил, что JNA - очень хороший способ сделать это, так как вам не нужно ничего писать родной код вообще делать родные звонки. Обратите внимание, что выполнение этого способа приводит к снижению производительности, поэтому, вероятно, это не будет возможным, если вы будете использовать нативный код в узком цикле, где производительность может быть проблемой.