Java native interface

На Хабре вже були подібні статті, але для Windows і «нічого не зрозуміло» для новачків на зразок мене. В принципі нічого складного немає, але є де спіткнутися і на довго засісти в пошукових системах, як було зі мною.

Для чого і як застосовувати C / C ++ в додатку для Java кожен придумає самостійно, зупинятися на цьому не буду, скажу лише, що при роботі з будь-яким обладнанням така зв'язка може бути дійсно корисною.

Так само не буду торкатися нюансів з типами даних, скажу лише, що примітивні типи (такі як jint або jdouble) відрізняються від рідних для C ++ рівно нічим.

І так. Для початку в двох словах про те як це працює. Ми пишемо на C ++ код, наприклад, обробляє якесь зображення і повертає нам кількість кошенят. Потім компілюємо динамічно завантажується бібліотеки і довантажувати її в нашому додатку на Java, яке викачує нам картинку з VK. Не складно.

Для виконання функцій з підключеною бібліотеки необхідно оголосити відповідні методи в будь-якому класі і позначити їх як native. Далі по ним буде згенеровано заголовки містить прототипи функцій з відповідними сигнатурами.

Header отримуємо утилітою javah з скомпільованого class-файлу.

Отриманий заголовки краще взагалі не чіпати, тому що він може змінюватися при складанні проекту. Просто інклуд його в cpp файлі і описуємо функції там, головне нічого не наплутати з іменами функцій і параметрами, краще копіювати або доручити це IDE.

Збираємо динамічну бібліотеку.

Прапори -fpic -c -shared обов'язкові для коректної компіляції.

Залишилося написати клас на Java з методом main, скомпілювати його і запустити додаток.

При запуску вказуємо віртуальній машині шлях до директорії з динамічної бібліотекою, тому що за замовчуванням шукати вона буде тільки по шляхах записаним в змінних середовища.

Для того що б вручну НЕ компілювати кожен файл окремо можна написати простий Makefile, який в подальшому можна використовувати з Eclipse