O terminal informa sen problemas dunha versión de OpenSSL, e a árbore de código fonte segue fallando cunha mensaxe sobre cabeceiras criptográficas ausentes. Ambas as afirmacións son certas á vez, porque a ferramenta de execución e un conxunto de entradas de compilación distribúense por separado. Faga estas catro comprobacións en orde: paquetes instalados, saída de descuberta, rutas de busca e, por último, se o propio código fonte é compatible. Detéñase na primeira que explique o fallo, en lugar de pegar unha lista de dependencias antiga.

A execución e as entradas de compilación son paquetes distintos

Unha distribución divide OpenSSL nun paquete de execución que fornece a biblioteca compartida e a ferramenta de liña de ordes, e un paquete de desenvolvemento que fornece cabeceiras, nomes de enlace sen versión e metadatos de pkg-config. Instalar o primeiro non instala o segundo, e o compilador só precisa o segundo.

Comprobe o que está realmente presente en lugar do que recorda ter instalado. Nos sistemas derivados de Debian o paquete de desenvolvemento adoita ser libssl-dev, mentres que a execución é un paquete de biblioteca con versión máis o binario openssl.

dpkg -l | grep -E 'libssl-dev|libssl3|openssl'
pkg-config --modversion openssl
openssl version

O primeiro comando mostra cal dos tres está instalado, o segundo informa da versión que o sistema de compilación descubrirá mediante pkg-config, e o terceiro informa da versión de execución. Unha liña ausente na primeira saída explica o erro de inmediato. Unha discrepancia de versión entre o segundo e o terceiro é outro problema, e normalmente significa que compiten dúas instalacións.

Lea a propia saída de descuberta da compilación

A maioría dos fallos son visibles no rexistro de configuración se o le antes do resumo. O módulo FindOpenSSL de CMake informa de que directorio de inclusión e que bibliotecas atopou, e falla cunha mensaxe específica cando falta un compoñente obrigatorio.

Confirme que versión do módulo usa o proxecto, porque unha copia incluída dentro da árbore de código fonte pode comportarse de forma distinta á que se distribúe co CMake instalado. Despois lea a lista de compoñentes: un proxecto que só pide Crypto non necesita a biblioteca SSL, e un que pide SSL fallará se só está presente parte do paquete de desenvolvemento.

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
grep -i -E 'openssl|ssl' build/CMakeCache.txt

O primeiro comando reconfigura desde cero, e o segundo mostra os resultados na caché, incluído calquera directorio raíz ou ruta de biblioteca na que se detivo o módulo. Se a caché apunta a un prefixo antigo dun intento anterior, borre o directorio de compilación e configure de novo en lugar de editar valores a man. As entradas obsoletas da caché son unha causa habitual dun fallo que sobrevive a unha corrección correcta.

Dirixa a compilación á instalación correcta, de forma estrita

Cando un OpenSSL aprobado vive fóra da ruta de busca predeterminada, FindOpenSSL documenta OPENSSL_ROOT_DIR como unha pista para esa compilación concreta. Nos sistemas tipo Unix tamén consulta pkg-config, así que un PKG_CONFIG_PATH axeitado pode axudar sen cambiar nada globalmente.

cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release
ldd build/vpn_client | grep -i ssl

O primeiro comando limita a pista a un directorio de compilación, e o segundo mostra que biblioteca compartida cargará o binario resultante en tempo de execución. Unha compilación que enlaza co prefixo previsto e un binario que carga outro distinto é un problema de ruta de execución, non un problema de descuberta, e require unha decisión sobre rpath ou a configuración do cargador en lugar doutra opción de configuración.

Manteña estas eleccións locais á compilación. Substituír bibliotecas do sistema ou editar ficheiros pkg-config globais para satisfacer un só proxecto é a forma en que un escritorio que funciona se converte nun roto. Un directorio de compilación que rexistra o prefixo é reproducible; un cambio en toda a máquina é un incidente de soporte esperando o seguinte proxecto. Borre o directorio de compilación cando cambie a pista, para que a caché non poida conservar a resposta antiga.

Saiba cando o problema é o código fonte

Un paso de configuración correcto só demostra que as comprobacións se completaron. A compilación aínda pode rexeitar unha API que o código fonte espera, e o enlace aínda pode fallar por un símbolo ausente. Garde o primeiro erro específico de cada etapa, porque os posteriores adoitan ser consecuencias.

OpenSSL 3 marcou como obsoletas e eliminou varias interfaces que os clientes VPN máis antigos usan directamente, así que unha árbore de código fonte desa época pode necesitar cambios reais en lugar dunha ruta de inclusión nova. Se os mantedores admiten unha versión actual, úsea. Se non, a decisión corresponde a quen posúe o servizo, non a unha busca dun nome de ficheiro de biblioteca máis antigo.

Os compoñentes opcionais de escritorio tamén teñen os seus requisitos. Un obxectivo de liña de ordes que se configura limpiamente non di nada sobre se o conxunto de ferramentas GUI e o editor se compilarán, así que trate unha lista antiga de paquetes Qt como historia e non como especificación. Revise as opcións propias da revisión do código fonte para saber que interfaces están habilitadas de forma predeterminada. Despois compile só o que necesite, porque cada dependencia opcional é outro problema de descuberta esperando a ocorrer.

Artigos relacionados