Terminalen rapporterer gjerne en OpenSSL-versjon, og kildetreet feiler fortsatt med en melding om manglende kryptohodere. Begge påstandene er sanne samtidig, fordi et kjøretidsverktøy og et sett med byggeinndata leveres hver for seg. Gå gjennom disse fire kontrollene i rekkefølge: installerte pakker, søkeutdata, søkestier og til slutt om selve kilden er kompatibel. Stopp ved den første som forklarer feilen, i stedet for å lime inn en gammel avhengighetsliste.

Kjøretid og byggeinndata er forskjellige pakker

En distribusjon deler OpenSSL i en kjøretidspakke som gir det delte biblioteket og kommandolinjeverktøyet, og en utviklingspakke som gir headere, uversjonerte lenkenavn og pkg-config-metadata. Å installere den første installerer ikke den andre, og kompilatoren trenger bare den andre.

Sjekk hva som faktisk er til stede, i stedet for hva du husker at du installerte. På Debian-baserte systemer er utviklingspakken vanligvis libssl-dev, mens kjøretiden er en versjonert bibliotekpakke pluss openssl-binæren.

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

Den første kommandoen viser hvilken av de tre som er installert, den andre rapporterer versjonen byggesystemet finner via pkg-config, og den tredje rapporterer kjøretidsversjonen. En manglende linje i den første utdataen forklarer feilen umiddelbart. En versjonsforskjell mellom den andre og den tredje er et annet problem, og betyr vanligvis at to installasjoner konkurrerer.

Les byggets egen søkeutdata

De fleste feil er synlige i konfigurasjonsloggen hvis du leser den før sammendraget. FindOpenSSL-modulen i CMake rapporterer hvilken inkluderingskatalog og hvilke biblioteker den fant, og den feiler med en konkret melding når en påkrevd komponent mangler.

Bekreft hvilken modulversjon prosjektet bruker, fordi en kopi som følger med inne i kildetreet kan oppføre seg annerledes enn den som leveres med den installerte CMake. Les deretter komponentlisten: et prosjekt som bare ber om Crypto trenger ikke SSL-biblioteket, og et som ber om SSL vil feile hvis bare en del av utviklingspakken er til stede.

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

Den første kommandoen konfigurerer på nytt fra bunnen av, og den andre viser de bufrede resultatene, inkludert enhver rotkatalog eller biblioteksti som modulen landet på. Hvis bufferen peker på et gammelt prefiks fra et tidligere forsøk, slett byggemappen og konfigurer på nytt i stedet for å redigere verdier manuelt. Utdaterte bufferoppføringer er en vanlig årsak til en feil som overlever en korrekt rettelse.

Rett bygget mot den riktige installasjonen, smalt

Når en godkjent OpenSSL ligger utenfor standard søkesti, dokumenterer FindOpenSSL OPENSSL_ROOT_DIR som et hint for nettopp det bygget. På Unix-lignende systemer spør den også pkg-config, så et passende PKG_CONFIG_PATH kan hjelpe uten å endre noe globalt.

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

Den første kommandoen begrenser hintet til én byggemappe, og den andre viser hvilket delt bibliotek den resulterende binæren laster ved kjøring. Et bygg som lenker mot det tiltenkte prefikset, og en binær som laster et annet, er et kjøretidsstiproblem, ikke et søkeproblem, og det krever en beslutning om rpath eller lasterkonfigurasjon i stedet for nok et konfigurasjonsflagg.

Hold disse valgene lokale for bygget. Å erstatte systembiblioteker eller redigere globale pkg-config-filer for å tilfredsstille ett prosjekt er måten et fungerende skrivebord blir et ødelagt et. En byggemappe som registrerer prefikset, er reproduserbar; en endring for hele maskinen er en støttesak som venter på neste prosjekt. Slett byggemappen når du endrer hintet, slik at bufferen ikke kan beholde det gamle svaret.

Vit når kilden er problemet

Et vellykket konfigurasjonstrinn beviser bare at kontrollene ble fullført. Kompilering kan fortsatt avvise en API som kilden forventer, og lenking kan fortsatt feile på et manglende symbol. Ta vare på den første konkrete feilen fra hvert trinn, fordi de senere vanligvis er konsekvenser.

OpenSSL 3 gjorde flere grensesnitt utdaterte og fjernet dem, grensesnitt som eldre VPN-klienter bruker direkte, så et kildetre fra den tiden kan trenge reelle endringer i stedet for en ny inkluderingssti. Hvis vedlikeholderne støtter en gjeldende utgivelse, bruk den. Hvis ikke, tilhører beslutningen den som eier tjenesten, ikke et søk etter et eldre bibliotekfilnavn.

Valgfrie skrivebordskomponenter har også sine egne krav. Et kommandolinjemål som konfigureres rent, sier ingenting om hvorvidt GUI-verktøysettet og editoren bygges, så behandle en gammel Qt-pakkeliste som historie og ikke som spesifikasjon. Sjekk kildeversjonens egne alternativer for hvilke grensesnitt som er aktivert som standard. Bygg deretter bare det du trenger, fordi hver valgfri avhengighet er nok et søkeproblem som venter på å skje.

Relaterte artikler