Como insiro código C/C++ ao Java?

Olá à todos?
Queria saber?
Como insiro código C/C++ ao Java?

Não insere. O que vc faz é implementar o que quer em C ou C++ e fazer seu programa em Java “conversar” com o código compilado nativamente. O que buscar no Google: Java Native Interface (JNI) e Java Native Access (JNA).

Exemplinho básico.

Em Java:

public class OlaJNI {

    // carga da biblioteca
    static {
        System.loadLibrary( "ola" ); // ola.dll
    }

    // método nativo
    private native void olaMundo();

    public static void main( String[] args ) {
        new OlaJNI().olaMundo();
    }

}

Compile assim:
javac -h . OlaJNI.java

Vai gerar o header no mesmo diretório (OlaJNI.h).

Em C:

#include <jni.h>
#include <stdio.h>
#include <stdlib.h>

#include "OlaJNI.h"

JNIEXPORT void JNICALL Java_OlaJNI_olaMundo( JNIEnv *env, jobject obj ) {
    printf( "ola mundo (do programa em C)!\n" );
}

Compile a DLL assim (estou usando Windows e meu GCC é do MinGW), mudando para o caminho do JDK do seu ambiente:
gcc -shared -o ola.dll -I"C:\Program Files\Java\jdk-25\include" -I"C:\Program Files\Java\jdk-25\include\win32" OlaJNI.c

Vai gerar uma DLL com o nome ola (ola.dll) que vai ser carregada pela classe quando for executada (veja o código Java).

Agora você executa sua classe Java, que vai chamar o código nativo que está na DLL:
java --enable-native-access=ALL-UNNAMED OlaJNI -Djava.library.path=.

Publiquei no GitHub: GitHub - davidbuzatto/exemplo-jni: Exemplo básico de uso de JNI.

1 curtida

Uma outra pergunta?
Aproveitando o gancho, qual o compilador gcc para Windows usar em Linha de Comando?
Só sei para Linux.

Eu uso o gcc do MinGW, instalado via MSYS2.

Baixar, instalar e abrir o terminal (deve abrir depois da instalação).

No terminal do MSYS2:
pacman -S mingw-w64-ucrt-x86_64-toolchain

Vai instalar o toolchain para a ucrt (universal c runtime, visual studio 2015 e superiores).

Configurar o PATH para apontar para o bin, que por padrão vai instalar em:
C:\msys64\ucrt64\bin

No Linux o que vai mudar é a geração da lib, algo como
gcc -shared -fpic -o libola.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux OlaJNI.c

Onde JAVA_HOME é o caminho para a instalação do seu JDK.

Aproveitando da dica, como instalo o g++ (C++) no MSYS2?

Da forma que postei acima. O g++ faz parte do GCC (GNU Compiler Collection).

image