Hello World usando JNI com GCC

2 respostas
mizumoto

Boa tarde,

Estou tentando reproduzir uma versão carnavalesca do Hello World usando JNI encontrado na seguinte página:

http://javafree.uol.com.br/noticia/4553/Tutorial-JNI-em-Linux-com-GCC.html

Ao executar o "whereis java" o SO retorna o seguinte:
/usr/bin/java /etc/java /usr/lib/java /usr/share/java
Entretanto todos esses arquivos são links para o gij do linux e portanto não possuem os subdiretórios include e include/linux especificados no procedimento.

Sabendo que o meu jdk está no diretório /usr/java/jdk1.6.0_16, eu executei o comando gcc especificado no quinto passo do procedimento da seguinte maneira:
gcc -o lib/libCarnival.so -shared -Wl,-soname,libCarnival.so -I/usr/java/jdk1.6.0_16/include -I/usr/java/jdk1.6.0_16/include/linux/ Carnival.c -static -lc
Após executar o comando, o SO me retorna a seguinte mensagem de erro:

/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/3.4.6/crtbeginT.o: relocation R_X86_64_32 against `__deregister_frame_info' can not be used when making a shared object; recompile with -fPIC /usr/lib/gcc/x86_64-redhat-linux/3.4.6/crtbeginT.o: could not read symbols: Bad value

Alguém  poderia me ajudar a descobrir o que eu estou fazendo de errado?

Agradeço desde já

DM

2 Respostas

E

Pelas mensagens de erro (32, 64) dá a impressão de salada (coisas de 32 e 64 bits misturadas). Entretanto, não sei como resolver sua salada :frowning:

G

Se você quer usar a máquina da Sun você pode fazer algo diferente. Na minha máquina eu apenas configurei o JAVA_HOME e o PATH conforme:

export JAVA_HOME=/opt/jdk1.6.21 export PATH=$PATH:$JAVA_HOME/bin

Após isso basta configurar o alternatives:

/usr/sbin/alternatives --install /usr/bin/java java /opt/jdk1.6.21/bin/java 2 /usr/sbin/alternatives --config java

Na tela que aparecer basta digitar o numero desse JDK, no caso 2.

Criado 27 de julho de 2010
Ultima resposta 27 de jul. de 2010
Respostas 2
Participantes 3