novas distribuições causam falha de segmentação do antigo binário

2

Eu tenho um programa gráfico idoso (~ 1999) e infelizmente comercial que funciona perfeitamente bem em sistemas com gcc até 3.4.6 (CentOS 4.8). No entanto, em todas as distribuições baseadas no gcc 4. * que eu tentei, o programa falha com "falha de segmentação" (tentei diferentes versões do CenOS, Sebian e SUSE).

Existem versões mais recentes deste software (temos mesmo uma licença) com muitas novas opções, pelo que para o trabalho diário estamos bem servidos. No entanto, o antigo tem essa boa opção para exportar um gráfico como um x-gráfico, enquanto as versões mais recentes são apenas baseadas em PpenGL. Mesmo que o x-graphic seja feio (desculpe por este adjetivo) é muito mais rápido se você trabalhar em uma linha DSL.

As únicas bibliotecas que estavam faltando durante a instalação foram: libXp.so.6, libXmu.so.6 e mesa3. Eu os instalei sem problemas usando o repositório padrão.

Eu tentei strace a falha, mas depois de carregar todas as bibliotecas necessárias, o programa simplesmente pára sem me dar muita informação:

open("/lib/libuuid.so.1", O_RDONLY)     = 3
read(3, "7ELF
open("/lib/libuuid.so.1", O_RDONLY)     = 3
read(3, "7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%04%pre%%pre%%pre%"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=15200, ...}) = 0
mmap2(NULL, 17828, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7464000
mmap2(0xf7468000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0xfffffffff7468000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7463000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7462000
set_thread_area(0xff8de9b4)             = 0
mprotect(0xf746c000, 4096, PROT_READ)   = 0
mprotect(0x439000, 8192, PROT_READ)     = 0
mprotect(0xf74dc000, 4096, PROT_READ)   = 0
mprotect(0xf763f000, 1032192, PROT_READ|PROT_WRITE) = 0
mprotect(0xf763f000, 1032192, PROT_READ|PROT_EXEC) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Segmentation fault
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%04%pre%%pre%%pre%"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=15200, ...}) = 0 mmap2(NULL, 17828, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7464000 mmap2(0xf7468000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3) = 0xfffffffff7468000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7463000 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7462000 set_thread_area(0xff8de9b4) = 0 mprotect(0xf746c000, 4096, PROT_READ) = 0 mprotect(0x439000, 8192, PROT_READ) = 0 mprotect(0xf74dc000, 4096, PROT_READ) = 0 mprotect(0xf763f000, 1032192, PROT_READ|PROT_WRITE) = 0 mprotect(0xf763f000, 1032192, PROT_READ|PROT_EXEC) = 0 --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ Segmentation fault

Alguém tem alguma idéia de como executar esse programa nas novas distribuições?

p.s. Eu não tenho fontes para isso. O conselho Use a fonte, Luke !! não funcionará para mim.

p.s.s. Para pessoas curiosas - o software é chamado gaussview v2

    
por Kris_R 27.06.2013 / 16:45

1 resposta

2

Meu conselho seria instalar uma distribuição mais antiga (CentOS 4, se é isso que você está acostumado) em um chroot e execute sua aplicação lá. Ele usará alguns GB de espaço em disco, mas é bem menos demorado do que encontrar uma maneira de fazer o binário funcionar com as bibliotecas atuais.

Eu não tenho um procedimento para oferecer a você instalar o CentOS em um chroot. As instruções de instalação manuais devem ser um bom ponto de partida - pule a parte sobre como tornar a instalação inicializável e configure um chroot. Você pode usar schroot para tornar isso mais fácil (tutorial ).

    
por 29.06.2013 / 03:22