Pergunta

Estou prestes a fazer minha primeira viagem ao mundo do JNI (Java Native Interface) para fornecer notificações de alteração do sistema de arquivos do código C/C++ específico da plataforma para Java.A menos que alguém sugira alguma biblioteca brilhante para fazer isso que eu perdi.

Sendo novo no JNI, consegui encontrar muita documentação sobre o lado da interface e sobre a geração de bibliotecas, mas não encontrei muita coisa sobre como construir a biblioteca nativa.

Eu tenho uma compilação existente baseada em ant para a fonte Java pré-existente, então estou tentando descobrir se devo fazer com que o ant chame make para criar a biblioteca ou se é melhor fazer com que o make chame o ant depois de criar a biblioteca?

Nenhuma das opções parece terrivelmente boa, mas ambas parecem melhores do que tentar fazer com que o ant chame um compilador para compilar o código e gerar a biblioteca diretamente.

Foi útil?

Solução

Eu não gosto muito de make por causa de seu conjunto de regras implícito e do tratamento de espaços em branco.Pessoalmente, eu usaria tarefas cpp (http://ant-contrib.sourceforge.net/cpptasks/index.html) para fazer minha compilação C.Eles não são tão flexíveis quanto o make, mas também são muito menos complexos e isso significa que você não terá que sobrecarregar seus desenvolvedores com o aprendizado do make.

Outras dicas

Como alternativa mais simples ao JNI, experimente o JNA: https://jna.dev.java.net/, pode resolver esse incômodo para você e ser mais simples (supondo que possa fazer o que você deseja).

Eu pularia totalmente o JNI e usaria um programa externo que grava notificações na saída padrão.Java pode então simplesmente ler o fluxo de saída do programa e gerar qualquer evento necessário.JNI dá muito trabalho se tudo o que você deseja é enviar notificações simples.

Além disso, no Linux você pode simplesmente iniciar "inotifywait" (com alguns parâmetros adequados, consulte "man inotifywait").

Estou trabalhando em algo semelhante agora.Esteja ciente de que usar o swig do swig.org geralmente é mais fácil, pois ele gera os stubs para a biblioteca nativa para você.

A resposta curta à sua pergunta é que o arquivo ant deve executar o arquivo make após a biblioteca java já ter sido construída, pois a biblioteca nativa depende do cabeçalho gerado pelo swig, que é gerado a partir dos arquivos de classe java.

Se você está super familiarizado com o ant e não quer aprender um novo sistema, então http://ant-contrib.sourceforge.net/cpptasks/index.html, também vinculado por outro postador, permitirá que você construa c++ em ant.

Você também pode tentar as tarefas terp C++ em Codemesh.Eles não são gratuitos, mas oferecem um alto nível de abstração juntamente com a capacidade de descobrir/especificar o compilador C++ e a capacidade de iterar em mais de um compilador/arquitetura de processador/configuração do compilador para compilações multiplataforma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top