Pagina 1 di 3

Segmentation fault

Inviato: sab 23 gen 2010, 20:46
da shock
Salve, avevo un gioco da far funzionare...necessitava di alcune librerie a 32 bit.Le ho installate.
Ora se lo apro appare una schermata nera per una frazione di secondo e poi si chiude.Se lo apro da shell mi da l'errore "Segmentation fault".
Ho letto riguardo questo errore, ma non capisco cosa c'entri con questo gioco.

Wikipedia dice:

"Un errore di segmentazione (in inglese segmentation fault, spesso abbreviato in segfault) è una particolare condizione di errore che può verificarsi durante l'esecuzione di un programma per computer. Un errore di segmentazione ha luogo quando un programma tenta di accedere ad una posizione di memoria alla quale non gli è permesso accedere, oppure quando tenta di accedervi in una maniera che non gli è concessa (ad esempio, scrivere su una posizione di sola lettura, oppure sovrascrivere parte del sistema operativo)."

Interessante è anche questo : http://www.cyberciti.biz/tips/segmentat ... -unix.html

Come posso risolvere?

Ciao a tutti.

Offtopic: Chiedo scusa per aver aperto un altro topic quando di questa cosa si è già parlato qui viewtopic.php?f=51&t=31079 solo che voglio fare una cosa piu ordinata e pulita

Re: Segmentation fault

Inviato: sab 23 gen 2010, 21:09
da 414N
Se magari ti scucissi un po' di più e ci dicessi il nome del gioco in questione, magari qualcosa si potrebbe capire.
Il segmentation fault è un errore che può avere svariate cause scatenanti, percui risulta molto difficile risalirvi senza molte altre informazioni.
Tanto per darti un'idea, può essere un errore di programmazione, ma anche un banale strip (intendo il rimuovere informazioni superflue dagli eseguibili tramite l'omonimo comando) dei binari può scatenarlo (vedi questo mio topic), per non parlare di dati corrotti sul disco fisso.
Tanto per capire se è un problema di grafica o meno, prova a lanciare il gioco così

Codice: Seleziona tutto

export LIBGL_DEBUG=verbose
/path/del/exe/del/gioco
Riporta eventuali messaggi di errore che compaiono (tipo librerie impossibili da aprire etc.).
Nel caso non compaia alcun messaggio di errore, uno stack trace del lancio dell'applicazione potrebbe essere utile. Lancia il programma con

Codice: Seleziona tutto

strace /path/del/exe/del/gioco
Mi raccomando, racchiudi tutto l'output che intendi riportare tra i tag code.

Re: Segmentation fault

Inviato: sab 23 gen 2010, 21:47
da shock
Questo è l'output di strace :

Codice: Seleziona tutto

root@darkstar:~# strace /root/BOH
execve("/root/BOH", ["/root/BOH"], [/* 56 vars */]) = -1 EACCES (Permission denied)
dup(2)                                                  = 3
fcntl(3, F_GETFL)                                 = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe58335b000
lseek(3, 0, SEEK_CUR)                       = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n"..., 32strace: exec: Permission denied
) = 32
close(3)                                                = 0
munmap(0x7fe58335b000, 4096)            = 0
exit_group(1)                                         = ?
L'altro comando non lo ho ben capito.

Re: Segmentation fault

Inviato: dom 24 gen 2010, 13:24
da metrofox
Il binario si chiama BHO?

il comando di sopra è:

Codice: Seleziona tutto

export LIBGL_DEBUG=verbose

Re: Segmentation fault

Inviato: dom 24 gen 2010, 14:12
da shock
Si , il gioco si chiama proprio BOH http://www.bohthegame.com/ (ne approfitto per farne pubblicità, dato che è un gioco tutto italiano :D )

Codice: Seleziona tutto

root@darkstar:~# strace /root/BOH
execve("/root/BOH", ["/root/BOH"], [/* 56 vars */]) = -1 EACCES (Permission denied)
dup(2)                                                  = 3
fcntl(3, F_GETFL)                                 = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe58335b000
lseek(3, 0, SEEK_CUR)                       = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n"..., 32strace: exec: Permission denied
) = 32
close(3)                                                = 0
munmap(0x7fe58335b000, 4096)            = 0
exit_group(1)                                         = ?
Ho riscritto il codice per far notare (cosa che sicuramente avrete gia fatto), che al 2°rigo c'è scritto PERMISSION DENIED...cosa non è permesso?

Riguardo l'altro comando, non ho capito come devo scriverlo...il primo era "strace /root/BOH" ed il secondo ??

Codice: Seleziona tutto

root@darkstar:~# export LIBGL_DEBUG=verbose
root@darkstar:~# export LIBGL_DEBUG=verbose /root/BOH
bash: export: `/root/BOH': not a valid identifier
root@darkstar:~#
Ciao.

Re: Segmentation fault

Inviato: dom 24 gen 2010, 14:31
da 414N
Devi semplicemente eseguire la sequenza che ti avevo scritto. l'export serve a impostare una variabile d'ambiente, dopodiché devi lanciare normalmente l'applicazione.
Puoi fare tutto in una riga sola:

Codice: Seleziona tutto

LIBGL_DEBUG=verbose /root/BOH
Il problema dei permessi è forse causato dal fatto che tenti di lanciare il programma come utente normale e non root, visto che l'hai installato in /root.

Re: Segmentation fault

Inviato: dom 24 gen 2010, 17:36
da ZeroUno
Può sembrare scontato, ma io la butto lì:

Codice: Seleziona tutto

# chmod +x /root/BOH
Ciao
01

Re: Segmentation fault

Inviato: dom 24 gen 2010, 19:49
da metrofox
No, lui usa sempre l'account root quindi non è un permesso, allora dai i permessi di esecuzione con chmod +x /root/BHO, imposta la variabile d'ambiente e continua :-)

Re: Segmentation fault

Inviato: dom 24 gen 2010, 21:11
da shock
L'assegnazione dei permessi funziona normalmente.
La prima volta ho avuto questo risultato :

Codice: Seleziona tutto

root@darkstar:~# LIBGL_DEBUG=verbose /root/BOH
bash: /root/BOH: is a directory
Poi ho fatto cosi :

Codice: Seleziona tutto

root@darkstar:~# cd /root/B*
root@darkstar:~/BOH# LIBGL_DEBUG=verbose ./BOH
Segmentation fault
come potete vedere, il problema persiste (sempre che io abbia dato bene il comando [il gioco io lo avvio cosi----->cd /root/BOH poi ./BOH]

Ciao e grazie.

Re: Segmentation fault

Inviato: dom 24 gen 2010, 21:43
da zoros
se manca l'emulazione (o supporto ?) a 32bit nel kernel è come se i programmi a 32bit non esistessero ...

Re: Segmentation fault

Inviato: dom 24 gen 2010, 22:19
da zoros
a scanso di equivoci, io avrei risposto al thread di cui sotto:
shock-post.png
shock-post.png (24.43 KiB) Visto 4170 volte
per cui era presumibile anche qualche mancanza nel kernel ... stando al post modificato invece direi proprio di no ...
che scherzi shock :shock: , che shock :lol:

io proverei altre librerie 32bit ... prova quelle di bluewhite64, le scarichi tutte:

Codice: Seleziona tutto

wget -cmnd -A txz  http://mirrors.xservers.ro/bluewhite64/bluewhite64-13.0/extra/ia32-emulation/
Attenzione però: forse prima conviene fare una installazione in una directory locale con:

Codice: Seleziona tutto

installpkg -root /percorso ...
ed esportare questo percorso con LD_LIBRARY_PATH

Re: Segmentation fault

Inviato: dom 24 gen 2010, 22:34
da shock
Si scusami, solo che prima avevo dato i comandi dimendicandomi di aver cancellato la directory :D

Dunque...ho capito tutto del tuo messaggio, tranne questo :
Attenzione però: forse prima conviene fare una installazione in una directory locale con:

Codice: Seleziona tutto

installpkg -root /percorso ...
ed esportare questo percorso con LD_LIBRARY_PATH
Ciao e scusa per lo shock :lol:

Re: Segmentation fault

Inviato: dom 24 gen 2010, 22:45
da zoros
se scrivi solo installpkg ti spiega cosa significa ... in pratica ti estrae i txz in una directory che hai scelto tu ... e questo accorgimento per evitare di sovrascrivere le librerie che hai già ...

poi il comando:

Codice: Seleziona tutto

export LD_LIBRARY_PATH=/percorso-librerie
rimanendo nella bash dovrebbe fare in modo che il programma cerchi di caricare queste librerie per prime ... ma se non ci riesce cerca nei percorsi classici /lib /usr/lib, ecc. ... quindi una cosa che non modifica il tuo sistema ...

Re: Segmentation fault

Inviato: dom 24 gen 2010, 23:01
da shock
E tu quale percorso mi suggerisci?Io quando ho installato le altre librerie, come puoi vedere dal 4° post di questa discussione viewtopic.php?f=51&t=31079 non le ho installate non in una directory precisa...(se non erro [spero di non aver detto una boiata]).

Ciao.

Re: Segmentation fault

Inviato: dom 24 gen 2010, 23:31
da 414N
shock ha scritto:Si , il gioco si chiama proprio BOH http://www.bohthegame.com/ (ne approfitto per farne pubblicità, dato che è un gioco tutto italiano :D )

Codice: Seleziona tutto

root@darkstar:~# strace /root/BOH
execve("/root/BOH", ["/root/BOH"], [/* 56 vars */]) = -1 EACCES (Permission denied)
dup(2)                                                  = 3
fcntl(3, F_GETFL)                                 = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 1), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe58335b000
lseek(3, 0, SEEK_CUR)                       = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n"..., 32strace: exec: Permission denied
) = 32
close(3)                                                = 0
munmap(0x7fe58335b000, 4096)            = 0
exit_group(1)                                         = ?
Ho capito adesso l'errore mostrato qua. Sta tutto nel fatto che hai tentato di lanciare una directory: per forza neanche root ha il permesso...
A giudicare anche dagli altri output che hai riportato e dai dubbi che hai espresso mi sa che stai facendo un macello fuori misura.
Ricapitoliamo: /root/BOH è la directory nella quale hai estratto/installato il gioco, mentre /root/BOH/BOH è l'eseguibile del gioco. È inutile che tenti di lanciare la directory quando ti chiediamo di lanciare il gioco in un certo modo / con certi argomenti. Devi lanciare l'eseguibile.
Detto questo, mi sono scaricato la demo per Linux e ho provato a lanciarla, ma anche a me dà un bel segmentation fault.
Dando un'occhiata alle librerie necessarie al funzionamento tramite ldd non noto alcuna carenza:

Codice: Seleziona tutto

        linux-gate.so.1 =>  (0xffffe000)
        libSDL_mixer-1.2.so.0 => /usr/lib/libSDL_mixer-1.2.so.0 (0xf76f7000)
        libSDL-1.2.so.0 => /usr/lib/libSDL-1.2.so.0 (0xf7644000)
        libm.so.6 => /lib/libm.so.6 (0xf761e000)
        libc.so.6 => /lib/libc.so.6 (0xf74be000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xf74a6000)
        libdl.so.2 => /lib/libdl.so.2 (0xf74a1000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0xf7386000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0xf7378000)
        libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xf7371000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0xf7368000)
        libvga.so.1 => /usr/lib/libvga.so.1 (0xf72e9000)
        /lib/ld-linux.so.2 (0xf7790000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0xf72d0000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0xf72cd000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xf72c8000)
mentre dallo stack trace ottenuto con strace ho notato che ricerca anche libvorbis.
Ho usato il pacchetto incluso in Slackware 13.0 (richiede anche libogg) per crearne uno di compatibilità, l'ho installato e la demo è partita tranquillamente.
Te li allego al post. Ti basta installarli con installpkg.