De terminal meldt graag een OpenSSL-versie, en de bronboom mislukt nog steeds met een melding over ontbrekende crypto-headers. Beide uitspraken zijn tegelijk waar, omdat een runtime-programma en een set build-invoer apart worden geleverd. Voer deze vier controles in volgorde uit: geïnstalleerde pakketten, zoekuitvoer, zoekpaden en ten slotte of de bron zelf compatibel is. Stop bij de eerste die de fout verklaart in plaats van een oude afhankelijkhedenlijst te plakken.

Runtime en build-invoer zijn verschillende pakketten

Een distributie splitst OpenSSL in een runtimepakket dat de gedeelde bibliotheek en het opdrachtregelprogramma levert, en een ontwikkelpakket dat headers, niet-geversioneerde linknamen en pkg-config-metadata levert. Het eerste installeren installeert het tweede niet, en de compiler heeft alleen het tweede nodig.

Controleer wat er werkelijk aanwezig is in plaats van wat u denkt te hebben geïnstalleerd. Op Debian-afgeleiden is het ontwikkelpakket meestal libssl-dev, terwijl de runtime een geversioneerd bibliotheekpakket plus de openssl-binary is.

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

De eerste opdracht laat zien welke van de drie is geïnstalleerd, de tweede meldt de versie die het buildsysteem via pkg-config vindt, en de derde meldt de runtimeversie. Een ontbrekende regel in de eerste uitvoer verklaart de fout onmiddellijk. Een versieverschil tussen de tweede en de derde is een ander probleem, en betekent meestal dat twee installaties met elkaar concurreren.

Lees de eigen zoekuitvoer van de build

De meeste fouten zijn zichtbaar in het configuratielogboek als u het voor de samenvatting leest. De FindOpenSSL-module van CMake meldt welke include-map en welke bibliotheken hij heeft gevonden, en hij mislukt met een specifieke melding wanneer een vereiste component ontbreekt.

Bevestig welke moduleversie het project gebruikt, want een meegeleverde kopie in de bronboom kan zich anders gedragen dan die met de geïnstalleerde CMake wordt geleverd. Lees daarna de componentenlijst: een project dat alleen om Crypto vraagt heeft de SSL-bibliotheek niet nodig, en een dat om SSL vraagt mislukt als slechts een deel van het ontwikkelpakket aanwezig is.

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

De eerste opdracht configureert vanaf nul opnieuw, en de tweede toont de gecachete resultaten, inclusief elke hoofdmap of bibliotheekpad waarop de module uitkwam. Als de cache naar een oude prefix uit een eerdere poging wijst, verwijder dan de buildmap en configureer opnieuw in plaats van waarden met de hand te bewerken. Verouderde cache-items zijn een veelvoorkomende oorzaak van een fout die een correcte oplossing overleeft.

Richt de build nauw op de juiste installatie

Wanneer een goedgekeurde OpenSSL buiten het standaard zoekpad staat, documenteert FindOpenSSL OPENSSL_ROOT_DIR als hint voor precies die build. Op Unix-achtige systemen raadpleegt hij ook pkg-config, zodat een passende PKG_CONFIG_PATH kan helpen zonder iets globaal te wijzigen.

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

De eerste opdracht beperkt de hint tot één buildmap, en de tweede toont welke gedeelde bibliotheek de resulterende binary tijdens het draaien laadt. Een build die tegen de bedoelde prefix linkt en een binary die een andere laadt, is een runtime-padprobleem, geen zoekprobleem, en het vraagt een beslissing over rpath of loaderconfiguratie in plaats van nog een configuratievlag.

Houd deze keuzes lokaal voor de build. Systeembibliotheken vervangen of globale pkg-config-bestanden bewerken om één project tevreden te stellen is de manier waarop een werkend bureaublad een kapot exemplaar wordt. Een buildmap die de prefix vastlegt is reproduceerbaar; een wijziging voor de hele machine is een supportincident dat op het volgende project wacht. Verwijder de buildmap wanneer u de hint wijzigt, zodat de cache het oude antwoord niet kan bewaren.

Weet wanneer de bron het probleem is

Een geslaagde configuratiestap bewijst alleen dat de controles zijn afgerond. Compilatie kan nog steeds een API weigeren die de bron verwacht, en linken kan nog steeds mislukken op een ontbrekend symbool. Bewaar de eerste concrete fout van elke fase, want de latere zijn meestal gevolgen.

OpenSSL 3 heeft verschillende interfaces verouderd verklaard en verwijderd die oudere VPN-clients rechtstreeks gebruiken, dus een bronboom uit die tijd kan echte wijzigingen nodig hebben in plaats van een nieuw include-pad. Als de beheerders een huidige release ondersteunen, gebruik die dan. Zo niet, dan ligt de beslissing bij wie de dienst bezit, niet bij een zoektocht naar een oudere bibliotheekbestandsnaam.

Optionele bureaubladcomponenten hebben ook hun eigen eisen. Een opdrachtregeldoel dat schoon configureert zegt niets over of de GUI-toolkit en de editor bouwen, dus behandel een oude Qt-pakkettenlijst als geschiedenis en niet als specificatie. Controleer de eigen opties van de bronrevisie voor welke interfaces standaard zijn ingeschakeld. Bouw daarna alleen wat u nodig hebt, want elke optionele afhankelijkheid is weer een zoekprobleem dat staat te wachten om te gebeuren.

Gerelateerde artikelen