2013-05-14 12 views
6

This post jest bardzo pouczający na temat tego, co próbuję osiągnąć. Wygenerowałem prosty plik binarny HelloUnix.Jak uruchomić binarny plik ghc na innych komputerach?

$ echo 'main = putStrLn "Hello Unix"' > HelloUnix.hs 
$ ghc -static --make HelloUnix.hs 

Który stworzył HelloUnix binarny, miałem nadzieję z -static flagi wszystko jest rozprowadzane wewnątrz binarny tak, że wszystko jest potrzebne do uruchomienia binarny był sam plik. Przeniosłem plik binarny na inny komputer uniksowy, upewniłem się, że plik ma poprawny dostęp poprzez chmod. Uruchomiono plik binarny, ale pojawił się ten błąd, jeśli pojawiły się jakieś pomysły dotyczące debugowania tego problemu?

EDYTOWANIE: Obecnie próbuję rozwijać system rozproszony, dlatego miałem nadzieję, że po prostu rozprowadzę plik binarny do maszyn docelowych. Potrzebuję sposobu na uruchomienie binarnego bez względu na maszynę czarownic, na której działa, to jest cel tak czy inaczej.

EDIT2: ekspres Źródło:

[email protected]:~/Haskell_Program/SmallApp/HelloUnix$ uname -a 
Linux mike-1215B 3.0.0-13-generiC#22-Ubuntu SMP Wed Nov 2 13:27:26 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux 
[email protected]:~/Haskell_Program/SmallApp/HelloUnix$ file HelloUnix 
HelloUnix: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xa44cf0e797cd629e0add59722d51d2b20e00fad8, not stripped 
[email protected]:~/Haskell_Program/SmallApp/HelloUnix$ ldd HelloUnix 
linux-vdso.so.1 => (0x00007fff8404f000) 
libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fa918584000) 
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fa91837c000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa918081000) 
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa917e79000) 
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa917c75000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa9178b5000) 
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa917698000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fa918810000) 

Zdalna maszyna 1:

[[email protected]] hchiao [1:59] uname -a 
SunOS rimmer 5.9 Generic_122301-48 i86pc i386 i86pc 
[[email protected]] hchiao [1:60] file HelloUnix 
HelloUnix:  ELF 64-bit LSB executable Version 1, dynamically linked, not stripped 

Zdalna maszyna 2:

[email protected]:~/cloud-haskell$ uname -a 
Linux ip-10-240-88-224 3.2.0-36-virtual #57-Ubuntu SMP Tue Jan 8 22:21:19 UTC 2013 i686 i686 i386 GNU/Linux 
[email protected]:~/cloud-haskell$ file HelloUnix 
HelloUnix: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xa44cf0e797cd629e0add59722d51d2b20e00fad8, not stripped 

Edit3: Jestem teraz kompilacji kodu w maszyna 2 i próbuje uruchomić plik binarny w maszynie 1. Zakładam, że oba są i386, więc binarny powinien być w stanie uruchomić na drugiej maszynie. Jednak dostaję ten błąd: (? Dynamicznego łączenia może)

HelloUnix: Cannot find /lib/ld-linux.so.2 
Killed 

Myślę, że to mówi mi, że biblioteka (ld-linux.so.2) binarny zależą nie jest w moim komputerze docelowym. Jestem trochę zdezorientowany tym, co zrobiła flaga -static? Założyłem z flagą, że wszystkie zależności zostaną spakowane w plik binarny. Jaki byłby najlepszy sposób na przeniesienie kodu Haskell?

+6

Być może problemem jest niedopasowana architektura pliku i komputera docelowego. Możesz uruchomić 'uname -a' i' file HelloUnix', aby to sprawdzić. –

+3

Jest to prawdopodobnie najmniej przydatny komunikat o błędzie, na który mam nadzieję. Co to była maszyna źródłowa? Czym jest maszyna docelowa? Jakie są pozostałe biblioteki dynamiczne (użyj 'ldd')? Czy są dostępne dla celu? –

+1

Maszyna 'i386' nie uruchomi plików wykonywalnych' x86-64'. –

Odpowiedz

5

Jeśli kierujesz tę samą architekturę, powinna działać bez problemu (tak długo, jak konieczne będą również pliki danych).

Jeśli kierujesz się inną architekturą, tak jak w twoim przypadku, musisz skompilować krzyżowo dla platformy docelowej; patrz GHC wiki.

Powiązane problemy