Falhas de segmentação durante a compilação - por onde começar?

2

Eu tenho um problema particular que eu preciso resolver agora, mas eu realmente gostaria de saber uma boa estratégia para abordar esse tipo de problema - falhas de segmentação ao compilar o código de outras pessoas, então eu estou feliz por qualquer particular ou geral digite respostas.

Os detalhes

Estou tentando instalar o OpenSSL 1.0.1g em um Synology DS412 +. A versão do GCC que eu tenho (v4.2.1) não tem 64 bits compilada, que o OpenSSL reclama:

$ ./config --prefix=/opt         \
           --openssldir=/etc/ssl \
           --libdir=lib          \
           shared                \
           zlib-dynamic
$ make

recorte!

cryptlib.c:1: sorry, unimplemented: 64-bit mode not compiled in
cryptlib.c: In function 'OPENSSL_ia32cap_loc':
cryptlib.c:677: warning: dereferencing type-punned pointer will break strict-ali
asing rules
make[1]: *** [cryptlib.o] Error 1

Então, , estou tentando instalar o GCC 4.8.2 (já experimentei várias versões) e toda vez que ele parece falhar no GMP parte do make . Aconteceu tanto que eu decidi baixar o GMP e tentar compilar isso:

$ ./configure --prefix=/opt --build=i386-pc-linux-gnu
$ make

./gen-fac 32 0 >fac_table.h || (rm -f fac_table.h; exit 1)
/opt/bin/bash: line 1: 20507 Segmentation fault      (core dumped) ./gen-fac 32
0 > fac_table.h
make: *** [fac_table.h] Error 1

Eu não sou um programador C, e isso nem é o meu código, então a probabilidade de eu roubar o Valgrind para inspecionar o núcleo é baixa. Eu tive isso acontecer muitas vezes compilando bibliotecas, e aprender C não é algo que está na minha lista de prioridades. Existem alternativas para ...?

  • aprendendo C
  • perguntando em um fórum / lista de discussão

O único gerenciador de pacotes ao qual eu tenho acesso é o ipkg, e ele forneceu o GCC que não está à altura do full muster. Eu poderia configurar uma VM, construir um binário para o ipkg e colocá-lo no DS412? Não tendo feito algo assim antes, não sei quão viável é.

Qualquer ajuda ou percepção é muito apreciada.

    
por iain 15.05.2014 / 19:56

2 respostas

2

Eu não acho que você conseguirá fazer o que quiser. Esses tipos de dispositivos, como o Synology, muitas vezes usam versões reduzidas de ferramentas como Bash, etc. Essas versões reduzidas provavelmente estão faltando recursos, o que parece ser o problema, já que ele está puxando o Bash de um local não padrão, ou seja, /opt/bin/bash .

link

Antes de tentar criar isso você mesmo, eu daria uma olhada no site deles ou em seus fóruns para ver se o OpenSSL está sendo fornecido como um pacote binário que você pode simplesmente atualizar para o invés de tentar construí-lo você mesmo.

    
por 15.05.2014 / 21:01
2
  1. As duas últimas linhas parecem suspeitas

    $ ./config --prefix=/opt         \
           --openssldir=/etc/ssl \
           --libdir=lib          \
           shared                \
           zlib-dynamic
    

    qualquer opção para configurar (geralmente) começa com -- .

  2. 64 bits - tem certeza de que a distribuição que você está usando é de 64 bits? O processador é de 64 bits? O kernel está rodando no dispositivo 64 bits? By the way, não há muito ganho em usar o código de 64 bits com apenas 1GB de RAM. Na verdade, ele consome um pouco mais de memória devido ao tamanho maior de alguns tipos de dados e alinhamento.

  3. O erro

    /opt/bin/bash: line 1: 20507 Segmentation fault  (core dumped)
        ./gen-fac 32 0 > fac_table.h
    

    sugere onde está o problema - procure fontes de gen-fac e tente executá-lo no depurador.

  4. Por último, mas não menos importante, você não pode usar ipkg install openssl ou qual seja a sintaxe correta para instalar o pacote de distribuição?

por 15.05.2014 / 22:43