El terminal informa sin problemas de una versión de OpenSSL, y el árbol de código fuente sigue fallando con un mensaje sobre cabeceras criptográficas ausentes. Ambas afirmaciones son ciertas a la vez, porque la herramienta de ejecución y un conjunto de entradas de compilación se distribuyen por separado. Realice estas cuatro comprobaciones en orden: paquetes instalados, salida de descubrimiento, rutas de búsqueda y, por último, si el propio código fuente es compatible. Deténgase en la primera que explique el fallo, en lugar de pegar una lista de dependencias antigua.

La ejecución y las entradas de compilación son paquetes distintos

Una distribución divide OpenSSL en un paquete de ejecución que proporciona la biblioteca compartida y la herramienta de línea de comandos, y un paquete de desarrollo que proporciona cabeceras, nombres de enlace sin versión y metadatos de pkg-config. Instalar el primero no instala el segundo, y el compilador solo necesita el segundo.

Compruebe qué hay realmente en lugar de lo que recuerda haber instalado. En los sistemas derivados de Debian el paquete de desarrollo suele ser libssl-dev, mientras que la ejecución es un paquete de biblioteca con versión más el binario openssl.

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

El primer comando muestra cuál de los tres está instalado, el segundo informa de la versión que el sistema de compilación descubrirá mediante pkg-config, y el tercero informa de la versión de ejecución. Una línea ausente en la primera salida explica el error de inmediato. Una discrepancia de versión entre el segundo y el tercero es otro problema, y normalmente significa que compiten dos instalaciones.

Lea la propia salida de descubrimiento de la compilación

La mayoría de los fallos son visibles en el registro de configuración si lo lee antes del resumen. El módulo FindOpenSSL de CMake informa de qué directorio de inclusión y qué bibliotecas ha encontrado, y falla con un mensaje específico cuando falta un componente obligatorio.

Confirme qué versión del módulo usa el proyecto, porque una copia incluida dentro del árbol de código fuente puede comportarse de forma distinta a la que se distribuye con el CMake instalado. Después lea la lista de componentes: un proyecto que solo pide Crypto no necesita la biblioteca SSL, y uno que pide SSL fallará si solo está presente parte del paquete de desarrollo.

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

El primer comando reconfigura desde cero, y el segundo muestra los resultados en caché, incluido cualquier directorio raíz o ruta de biblioteca en el que se haya quedado el módulo. Si la caché apunta a un prefijo antiguo de un intento anterior, borre el directorio de compilación y configure de nuevo en lugar de editar valores a mano. Las entradas obsoletas de la caché son una causa habitual de un fallo que sobrevive a una corrección correcta.

Dirija la compilación a la instalación correcta, de forma estricta

Cuando un OpenSSL aprobado vive fuera de la ruta de búsqueda predeterminada, FindOpenSSL documenta OPENSSL_ROOT_DIR como una pista para esa compilación concreta. En los sistemas tipo Unix también consulta pkg-config, así que un PKG_CONFIG_PATH adecuado puede ayudar sin cambiar nada de forma global.

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

El primer comando limita la pista a un directorio de compilación, y el segundo muestra qué biblioteca compartida cargará el binario resultante en tiempo de ejecución. Una compilación que enlaza con el prefijo previsto y un binario que carga otro distinto es un problema de ruta de ejecución, no un problema de descubrimiento, y exige una decisión sobre rpath o la configuración del cargador en lugar de otra opción de configuración.

Mantenga estas elecciones locales a la compilación. Sustituir bibliotecas del sistema o editar archivos pkg-config globales para satisfacer un solo proyecto es la forma en que un escritorio que funciona se convierte en uno roto. Un directorio de compilación que registra el prefijo es reproducible; un cambio en toda la máquina es un incidente de soporte esperando al siguiente proyecto. Borre el directorio de compilación cuando cambie la pista, para que la caché no pueda conservar la respuesta antigua.

Sepa cuándo el problema es el código fuente

Un paso de configuración correcto solo demuestra que las comprobaciones se completaron. La compilación aún puede rechazar una API que el código fuente espera, y el enlace aún puede fallar por un símbolo ausente. Guarde el primer error específico de cada etapa, porque los posteriores suelen ser consecuencias.

OpenSSL 3 marcó como obsoletas y eliminó varias interfaces que los clientes VPN más antiguos usan directamente, así que un árbol de código fuente de esa época puede necesitar cambios reales en lugar de una ruta de inclusión nueva. Si los mantenedores admiten una versión actual, úsela. Si no, la decisión corresponde a quien es dueño del servicio, no a una búsqueda de un nombre de archivo de biblioteca más antiguo.

Los componentes opcionales de escritorio también tienen sus requisitos. Un objetivo de línea de comandos que se configura limpiamente no dice nada sobre si el conjunto de herramientas GUI y el editor se compilarán, así que trate una lista antigua de paquetes Qt como historia y no como especificación. Revise las opciones propias de la revisión del código fuente para saber qué interfaces están habilitadas de forma predeterminada. Luego compile solo lo que necesite, porque cada dependencia opcional es otro problema de descubrimiento esperando a ocurrir.

Artículos relacionados