Compiler pour x86_64 à partir de i386

Compiler pour x86_64 à partir de i386 - Linux et OS Alternatifs

Marsh Posté le 14-09-2005 à 10:13:00    

Salut,
 
j'aimerais pouvoir compiler des programmes pour l'architecture x86_64, à partir d'un Pentium3 (donc i386). Les sources des programmes sont du C et C++.
 
D'après ce que j'ai pu lire, ça se résume pas à passer un flag à gcc (mayrde [:petrus75]). J'ai utiliser crosstool ( http://kegel.com/crosstool/ ) pour générer un cross-compilateur, mais ça marche pas des masses :/ J'ai du louper un truc :


jon@ptrois:~$ x86_64-unknown-linux-gnu-gcc -o test test.cc
/tmp/cc7nSYfc.o(.text+0x19): In function `std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& )':
: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const'
/tmp/cc7nSYfc.o(.text+0x70): In function `std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& )':
: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned long) const'
/tmp/cc7nSYfc.o(.text+0xb3): In function `std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& )':
: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned long) const'
/tmp/cc7nSYfc.o(.text+0xe3): In function `std::__verify_grouping(char const*, unsigned long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& )':
: undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator[](unsigned long) const'
/tmp/cc7nSYfc.o(.text+0x124): In function `main':
: undefined reference to `std::cout'
/tmp/cc7nSYfc.o(.text+0x129): In function `main':
: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/cc7nSYfc.o(.text+0x131): In function `main':
: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >& )'
/tmp/cc7nSYfc.o(.text+0x136): In function `main':
: undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >& ))'
/tmp/cc7nSYfc.o(.text+0x165): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `std::ios_base::Init::Init()'
/tmp/cc7nSYfc.o(.text+0x192): In function `__tcf_0':
: undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc7nSYfc.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
jon@ptrois:~$
jon@ptrois:~$
jon@ptrois:~$ which x86_64-unknown-linux-gnu-gcc
/opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc
jon@ptrois:~$
jon@ptrois:~$
jon@ptrois:~$ x86_64-unknown-linux-gnu-gcc -v
Reading specs from /opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu/lib/gcc/x86_64-unknown-linux-gnu/3.4.4/specs
Configured with: /usr/local/src/crosstool-0.38/build/x86_64-unknown-linux-gnu/gcc-3.4.4-glibc-2.3.2/gcc-3.4.4/configure --target=x86_64-unknown-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu --disable-multilib --with-sysroot=/opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sys-root --with-local-prefix=/opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.4
jon@ptrois:~$


 
Avec le code qui tue [:cupra] :

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int main (void) {
  4.         cout << "Hello World !" << endl;
  5.         return 0;
  6. }


 
Voilà, si quelqu'un pouvait me renseigner sur ce que j'ai louper, ça serait cool [:romf]

Reply

Marsh Posté le 14-09-2005 à 10:13:00   

Reply

Marsh Posté le 14-09-2005 à 15:30:21    

[:marc]

Reply

Marsh Posté le 14-09-2005 à 16:26:18    

x86_64-pc-linux-gnu-gcc ou x86_64-pc-linux-gnu-gcc64 ?

Reply

Marsh Posté le 14-09-2005 à 16:36:44    

grojulius a écrit :

x86_64-pc-linux-gnu-gcc ou x86_64-pc-linux-gnu-gcc64 ?


 


jon@ptrois:~$ x86_64-unknown-linux-gnu-gcc
x86_64-unknown-linux-gnu-gcc        x86_64-unknown-linux-gnu-gcc-3.4.4  x86_64-unknown-linux-gnu-gccbug
jon@ptrois:~$ x86_64-unknown-linux-gnu-gcc


 
[:spamafote]

Reply

Marsh Posté le 14-09-2005 à 19:15:53    

tu as bien des libs 64 bits ?


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 15-09-2005 à 10:00:43    

Oui, j'ai des trucs :
 


ptrois:/opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu# ls lib -R
lib:
.  ..  gcc  libiberty.a
 
lib/gcc:
.  ..  x86_64-unknown-linux-gnu
 
lib/gcc/x86_64-unknown-linux-gnu:
.  ..  3.4.4
 
lib/gcc/x86_64-unknown-linux-gnu/3.4.4:
.  ..  crtbegin.o  crtbeginS.o  crtbeginT.o  crtend.o  crtendS.o  include  install-tools  libgcc.a  libgcc_eh.a  libgcov.a  specs
 
lib/gcc/x86_64-unknown-linux-gnu/3.4.4/include:
.  ..  README  emmintrin.h  float.h  iso646.h  limits.h  mmintrin.h  obstack.h  pmmintrin.h  stdarg.h  stdbool.h  stddef.h  syslimits.h  unwind.h  varargs.h  xmmintrin.h
 
lib/gcc/x86_64-unknown-linux-gnu/3.4.4/install-tools:
.  ..  gsyslimits.h  include  mkheaders.conf
 
lib/gcc/x86_64-unknown-linux-gnu/3.4.4/install-tools/include:
.  ..  README  emmintrin.h  float.h  iso646.h  limits.h  mmintrin.h  pmmintrin.h  stdarg.h  stdbool.h  stddef.h  unwind.h  varargs.h  xmmintrin.h
ptrois:/opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu


 
J'ai aussi des trucs dans /opt/xcompile/gcc-3.4.4-glibc-2.3.2/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu (super les noms à rallonge [:dawa] ) : ya des binaires de gcc, d'autres libs (dans lib/ et lib64/), etc. Elles ont un nom un peu plus parlant qu'au dessus.
 
En fait, ça ressemble plus à un problème de librairies non trouvée qu'autre chose :/ Je vais voir dans la doc de crosstool voir si je trouve un truc ...

Reply

Marsh Posté le 15-09-2005 à 10:15:03    

AHAH, la compilation d'un .c marche [:dawa]
 


jon@ptrois:/usr/local/src/crosstool-0.38/doc$ x86_64-unknown-linux-gnu-gcc simple.c -o simple
jon@ptrois:/usr/local/src/crosstool-0.38/doc$ uname -a
Linux ptrois 2.4.31-grsec #6 SMP Wed Sep 7 14:30:50 CEST 2005 i686 GNU/Linux
jon@ptrois:/usr/local/src/crosstool-0.38/doc$ file simple
simple: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped
jon@ptrois:/usr/local/src/crosstool-0.38/doc$


 
Par contre, les fichiers C++, c'est pas ça encore [:sisicaivrai]

Reply

Marsh Posté le 15-09-2005 à 10:19:34    

[:chalouf] Pourquoi je lançais gcc pour compiler du C++ ? [:chalouf]  
 
 


jon@ptrois:~$ x86_64-unknown-linux-gnu-g++ test.cc -o test
jon@ptrois:~$ uname -a
Linux ptrois 2.4.31-grsec #6 SMP Wed Sep 7 14:30:50 CEST 2005 i686 GNU/Linux
jon@ptrois:~$ file test
test: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped
jon@ptrois:~$ cat test.cc
#include <iostream>
using namespace std;
 
int main (void) {
        cout << "Hello World !" << endl;
        return 0;
}
jon@ptrois:~$


 
[:jar jar] Ca marche [:dawa] (reste à voir si je pourrais l'executer sur du 64bits, mais bon :D )

Reply

Marsh Posté le 15-09-2005 à 13:49:22    

si tu me l'envoies, je veux bien essayer


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 15-09-2005 à 13:50:48    

Merci, mais ça attendra que je testes sur ma machine un soir ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed