Usando Eclipse 64bits com java 32bits

Bom, tenho instalado na minha máquina o Eclipse 64bits. Porém surgiu a necessidade de usar o Java 32bits. Gostaria de saber se tem como fazer com que o Eclipse 64bits aceite o java 32bits sem precisar instalar o eclipse 32bits.

Não é apenas setar nas preferências?

Como se ele nem deixa eu abrir o eclipse 64bits se eu estiver usando java 32 bits.

Você não pode misturar as duas coisas, infelizmente :frowning:

Você pode instalar mais de uma versão do JDK, não pode?
Se não puder, você ainda pode apontar para o local onde os arquivos da versão x32 estão.

[quote=entanglement]Você não pode misturar as duas coisas, infelizmente :frowning:

[/quote]
Nesse ponto o visual studio é bem superior, posso gerar executáveis para x86 e x64…

Espera um pouquinho - o Visual Studio GERA executáveis para x86, x64 (e antigas versões geravam para Itanium também). Mas ele É (acho que ainda é) um programa de 32 bits puro.

Só explicando por que é que existe um Eclipse 32 bits e um Eclipse 64 bits mas não um NetBeans 32 bits e um NetBeans 64 bits.

O NetBeans é um programa 100% Java e ele usa o Java que estiver instalado, desde que a versão do Java seja suficientemente elevada para ele poder rodar.
(Se não me engano, há um netbeans.exe mas ele serve apenas para iniciar o javaw.exe para a versão correta - não estou com um NetBeans instalado aqui).

O Eclipse é um programa que contém muito código nativo (o próprio eclipse.exe, várias DLLs etc.) e todo esse código nativo, devido a características do sistema operacional*, não pode ser misturado com o código nativo do Java que estiver em uma quantidade diferente de bits.

(Note que o Windows 95 conseguia misturar, usando um pouco de mágica, código de 32 e de 16 bits no mesmo processo - já tive de usar esse tipo de mágica, e não gostei muito do resultado. Mas o Windows XP, 2000, 2008, Vista, 7, 8 etc. não consegue misturar código de 32 e de 64 bits no mesmo processo.
Mesmo quando um programa de 32 bits roda no Windows de 64 bits, ele usa uma versão virtualizada do Windows de 32 bits (e é por isso que as DLLs do Windows que são carregadas por programas de 32 bits ficam em c:\windows\syswow32 - wow = Windows On Windows.). Essa versão virtualizada contém algumas “pontes” que permitem um acesso restrito de código de 64 bits do kernel do Windows por código de 32 bits.

  • O Windows, o Linux, o MacOSX e o Solaris x86/x64 são assim - ou seja, dá a impressão é que o próprio processador é que limita a “mistura 32 /64 bits no mesmo processo”, senão pelo menos um dos sistemas operacionais faria isso. É possível ter processos de 32 e de 64 bits rodando na mesma máquina, mas não processos com código misturado.

[quote=entanglement]Só explicando por que é que existe um Eclipse 32 bits e um Eclipse 64 bits mas não um NetBeans 32 bits e um NetBeans 64 bits.

O NetBeans é um programa 100% Java e ele usa o Java que estiver instalado, desde que a versão do Java seja suficientemente elevada para ele poder rodar.
(Se não me engano, há um netbeans.exe mas ele serve apenas para iniciar o javaw.exe para a versão correta - não estou com um NetBeans instalado aqui). [/quote]

É por essas e outras que quando vem gente argumentando que a plataforma Java está pronta para jogos por causa do LWJGL eu fico afirmando que não. Quando entra código nativo e JNI, as coisas sempre são mais complicadas, e sempre há a necessidade de esforço extra para garantir que o programa vá rodar em todas as plataformas que a VM roda.

Em resumo, se está rodando fora da plataforma, não use como argumento para defender a plataforma. :slight_smile:

Enfim, no caso de poder instalar 2 Versões do JAva (uso linux ubuntu 64bits), como faço isso ?

Tenho apenas o Java 64bits em meu SO.

Dica:
a) Instale as 2 versões do java - 32 e 64 bits - o Windows deixa fazer isso sem problema nenhum
b) Faça o Eclipse (de sei lá quantos bits) usar a versão correta - edite o arquivo eclipse.ini que fica no mesmo diretório do Eclipse.

Exemplo:

-vm
C:/jdk1.7.0/32/bin/javaw.exe
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
...

Você edita (ou cria) uma linha -vm, e na linha seguinte você põe o path do javaw.exe ou java.exe que você vai usar para iniciar o Eclipse. Tome o cuidado de inclinar as barras dos diretórios para o lado certo (ou seja, para o lado Unix).

Como é que isso vai ficar na sua máquina? Na hora de você instalar o Java, ele deve lhe indicar em que diretório devem ficar os arquivos. (Eu tenho o costume, quando tenho 2 instalações do Java, de instalar a de 32 em c:\jdk1.7.0\32\ e a de 64 bits em c:\jdk1.7.0\64\ . )

Se não estiver assim na sua máquina, desinstale o Java e instale de novo no diretório certo - isso deve levar 10 minutos :slight_smile:

Como é que fica isso no caso do Linux? Não tenho a menor ideia onde o apt-get instala o Java (não estou com um Ubuntu aqui).

Entretanto, trabalho com um RedHat que tem várias versões do java instaladas, mas não com apt-get, e sim simplesmente descompactando a instalação em um diretório de nossa escolha.

Assim, pelo menos aqui no ubuntu eu mudo o link do Java 32 bits para Java 64bits e vise-versa, porém dessa forma eu só consigo usar 1 Java por vez, não sei como por 2 ao mesmo tempo.

Em vez de você usar o link simbólico (/usr/bin/java), você especifica, no eclipse.ini, que quer usar o java para o qual o link está apontando (acho que você conhece Linux suficientemente para saber para onde o link aponta, certo?)

Por exemplo, se /usr/bin/java aponta para /opt/java/x64/jdk1.7.0_25/bin/java (no caso de 64 bits - estou simplesmente chutando o diretório, não tenho um Ubuntu para olhar e conferir aqui qual é o diretório certo) você põe esse diretório absoluto no eclipse.ini.

Sim amigo, sei sim. Vou procurar fazer isso no eclipse.ini e retorno aqui para dizer se funcionou.

De qualquer forma, não há nada que impeça no Linux de você trabalhar como eu trabalho no RedHat (ou seja, em vez de usar o empacotador, simplesmente descompactar o pacote em um determinado diretório - isso me permite usar as versões do Java desde a versão 5, 6, 7, e a 8 que está no forno.

Bom, fiz as alterações necessários no eclipse.ini mas não funcionou, o eclipse não consegue inicializar:

Eclipse.ini

-vm
/usr/local/jvm/jdk1.6.0_43/bin/java
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20120522-1813
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Dhelp.lucene.tokenizer=standard
-XX:MaxPermSize=512m
-Xms512m
-Xmx768m

Em anexo coloquei a imagem do erro que ocorre ao tentar iniciar o eclipse com o java 32bits.


Só para conferir. Seu Eclipse é de 64 bits e seu Java ( /usr/local/jvm/jdk1.6.0_43/bin/java ) é de 64 bits, também?

Ou seu Eclipse é de 32 bits e seu Java ( /usr/local/jvm/jdk1.6.0_43/bin/java ) também?

Use o comando “file” para determinar se o binário é de 32 ou de 64 bits. Exemplo em uma máquina ao qual eu tenho acesso:

[entanglement@valinor ~]$ type java
java is /usr/java/jdk1.6.0_10_x64/bin/java
[entanglement@valinor ~]$ file /usr/java/jdk1.6.0_10_x64/bin/java
/usr/java/jdk1.6.0_10_x64/bin/java: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), for GNU/Linux 2.4.0, not stripped
[entanglement@valinor ~]$ file /usr/java/jdk1.6.0_24_i586/bin/java
/usr/java/jdk1.6.0_24_i586/bin/java: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped

Se você misturar as coisas, vai dar problemas mesmo (não sei se esse é o erro exato que vai ocorrer, já que nessa máquina Linux à qual tenho acesso eu não tenho um Eclipse rodando).