Como resolver referência indefinida para 'RAND_egd'

2

Debian 8 Jessie, OpenSSL versão 1.1.0, versão cURL: 7.50.2

Eu estou tentando construir o curl em um sistema Debian Linux. Todos os estágios vão bem até tentar construir com o comando make . O estágio de vinculação falha com o seguinte erro abaixo:

  CC       ../lib/curl-nonblock.o
  CC       ../lib/curl-warnless.o
  CCLD     curl
../lib/.libs/libcurl.so: undefined reference to 'RAND_egd'
collect2: error: ld returned 1 exit status
Makefile:771: recipe for target 'curl' failed
make[2]: *** [curl] Error 1

A função RAND_egd é parte da biblioteca OpenSSL, então executei ldd no arquivo libcurl.so para ter certeza de que a biblioteca OpenSSL foi encontrada, e está julgando pela saída do ldd abaixo.

    linux-vdso.so.1 (0x00007ffceb5a1000)
    libnghttp2.so.14 => /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007ff9ffc05000)
    libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007ff9ff9d1000)
    libssh2.so.1 => /usr/lib/x86_64-linux-gnu/libssh2.so.1 (0x00007ff9ff7a8000)
    libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007ff9ff53a000)
    libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007ff9ff0af000)
    liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007ff9feea0000)
    libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007ff9fec4e000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff9fea33000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff9fe688000)
    libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007ff9fe3a6000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff9fe1a2000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff9fdf85000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff9fdd6e000)
    libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007ff9fdb52000)
    libgnutls-deb0.so.28 => /usr/lib/x86_64-linux-gnu/libgnutls-deb0.so.28 (0x00007ff9fd833000)
    /lib64/ld-linux-x86-64.so.2 (0x00007ffa0009e000)
    libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007ff9fd621000)
    libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007ff9fd3db000)
    libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007ff9fd1c7000)
    libnettle.so.4 => /usr/lib/x86_64-linux-gnu/libnettle.so.4 (0x00007ff9fcf95000)
    libhogweed.so.2 => /usr/lib/x86_64-linux-gnu/libhogweed.so.2 (0x00007ff9fcd66000)
    libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ff9fcae3000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007ff9fc8db000)

Então a biblioteca está lá. Também verifiquei o arquivo rand.h no diretório include do OpenSSL e, é claro, a declaração da função está lá, portanto, ele deve ser definido na biblioteca. Como posso encontrar a causa e resolver esse erro?

    
por strwils 02.09.2016 / 21:17

1 resposta

0

How to Resolve undefined reference to 'RAND_egd'

Eu acredito que você deve agora chamar RAND_add_egd . Veja também simplificando a API rand_egd na lista de discussão openssl-dev.

O código que você está compilando deve ter uma proteção para o OpenSSL 1.1.0. Talvez algo como:

#if OPENSSL_VERSION_NUMBER >= 0x10100000L

    int rc = RAND_egd(<path>);
    ...

#else

    int rc = RAND_add_egd(<path>);
    ...

#endif

Daniel geralmente é muito bom em acompanhar o OpenSSL. Parece que você está recebendo uma versão de baixo nível de uma distribuição de algo.

De acordo com o problema cURL 763 , o cURL primeiro adicionou suporte para o openssl-1.1.0-dev pelo menos em Abril de 2016. O registro completo de alterações está em cURL Changelog .

Relacionado, você provavelmente deve seguir em frente a partir de cURL 7.50.2. Ele tem 12 vulnerabilidades conhecidas . Parece que o 7.51.0 foi lançado em 2 de novembro de 2016.

    
por 08.11.2016 / 13:17