Jni

3 respostas
ricardolecheta

eu preciso abrir um arquivo GIGANTESCO de 72MB :shock:

e encontrar uma sequencia de caracteres neste arquivo...

mas o Java não aguentou os 72MB do arquivo e lançou "OutOfMemoryError"

então para contornar vou escrever o código em C... mas o computador onde será instalado o programa é em LINUX e eu não consegui gerar uma dll igual se faz no windows... não sei bem como é... se se chama "*.so"

tentei fazer um HelloWorld mas nao consegui:

gcc -shared HelloWorld.c -o printf.so , aparece o erro abaixo: :?:

HelloWorld.c : In function 'Java_HelloWorld_print'
HelloWorld.c:6: parameter name omitted
HelloWorld.c:6: parameter name omitted
HelloWorld.c:10:3: warning: no newline at end of file

no windows eu consigo gerar a dll numa boa!

#include <jni.h>
#include <stdio.h>
#include "HelloWorldPrintf.h"

JNIEXPORT void JNICALL Java_HelloWorldPrintf_printf
  (JNIEnv *, jobject)
{
	printf("HelloWorld JNI - Congratulations! ");
	return;
}
public class HelloWorldPrintf
{
	public native void printf();
	
	static
	{
		System.loadLibrary("printf");	
	}
	
	public static void main(String args[])
	{
		new HelloWorldPrintf().printf();	
	}
}

se alguém puder me ajudar, eu ainda sou novado no Linux :)

obrigado

3 Respostas

wbsouza

Tente dar nome para os parametros do fonte escrito em C

#include <jni.h> 
#include <stdio.h> 
#include "HelloWorldPrintf.h" 

JNIEXPORT void JNICALL Java_HelloWorldPrintf_printf 
  (JNIEnv * ptrJNIEnv, jobject obj) 
{ 
   printf("HelloWorld JNI - Congratulations! "); 
   return; 
}
louds

acho que vc que fez alguma besteira…
pq eu tinha/tenho 1 projeto que mantia abertos arquivos de 200mb pra cima, varios, lendo a torto e a direito, e tinha outro que ja cheguei a testar ate 1.5Gb, funcionou sem problema.

vc, por acasou, nao tentou ler o arquivo todo na memoria de uma unica vez ne?

Caso seja indispensavel ter todo arquivo na memoria, use 1 arquivo memory mapped, ai vc consegue, sem problemas, usar arquivos de ate +/-2Gb sem muita preocupação.

ricardolecheta

realemente tentei ler tudo de uma vez :oops:

com relação ao JNI, coloquei os nomes para os parâmetros e funcionou…

obrigado

Criado 4 de junho de 2003
Ultima resposta 5 de jun. de 2003
Respostas 3
Participantes 3