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