Terminalen rapporterer gjerne ein OpenSSL-versjon, og kjeldekodetreet feilar framleis med ei melding om manglande kryptohovud. Begge påstandane er sanne samtidig, fordi eit køyretidsverktøy og eit sett byggeinndata blir leverte kvar for seg. Gå gjennom desse fire kontrollane i rekkjefølgje: installerte pakkar, søkjeutdata, søkjestiar og til slutt om sjølve kjelda er kompatibel. Stopp ved den første som forklarer feilen, i staden for å lime inn ei gammal avhengigheitsliste.

Køyretid og byggeinndata er ulike pakkar

Ein distribusjon deler OpenSSL i ein køyretidspakke som gir det delte biblioteket og kommandolinjeverktøyet, og ein utviklingspakke som gir hovudfiler, uversjonerte lenkjenamn og pkg-config-metadata. Å installere den første installerer ikkje den andre, og kompilatoren treng berre den andre.

Sjekk kva som faktisk er til stades, i staden for kva du hugsar at du installerte. På Debian-baserte system er utviklingspakken vanlegvis libssl-dev, medan køyretida er ein 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 kven av dei tre som er installert, den andre rapporterer versjonen byggjesystemet finn via pkg-config, og den tredje rapporterer køyretidsversjonen. Ei manglande linje i den første utdataen forklarer feilen med ein gong. Ein versjonsskilnad mellom den andre og den tredje er eit anna problem, og tyder vanlegvis at to installasjonar konkurrerer.

Les søkjeutdataen til bygget sjølv

Dei fleste feil er synlege i konfigurasjonsloggen om du les han før samandraget. FindOpenSSL-modulen i CMake rapporterer kva inkluderingskatalog og kva bibliotek han fann, og han feilar med ei konkret melding når ein påkravd komponent manglar.

Stadfest kva modulversjon prosjektet brukar, fordi ein kopi som følgjer med inne i kjeldekodetreet kan oppføre seg annleis enn den som blir levert med den installerte CMake. Les deretter komponentlista: eit prosjekt som berre ber om Crypto treng ikkje SSL-biblioteket, og eit som ber om SSL vil feile om berre ein del av utviklingspakken er til stades.

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

Den første kommandoen konfigurerer på nytt frå botnen, og den andre viser dei bufra resultata, inkludert kva rotkatalog eller biblioteksti modulen landa på. Om bufferen peiker på eit gamalt prefiks frå eit tidlegare forsøk, slett byggjemappa og konfigurer på nytt i staden for å redigere verdiar for hand. Utdaterte bufferpostar er ei vanleg årsak til ein feil som overlever ei korrekt retting.

Rett bygget mot den rette installasjonen, smalt

Når ein godkjend OpenSSL ligg utanfor standard søkjesti, dokumenterer FindOpenSSL OPENSSL_ROOT_DIR som eit hint for nettopp det bygget. På Unix-liknande system spør han òg pkg-config, så eit passande PKG_CONFIG_PATH kan hjelpe utan å endre noko 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 avgrensar hintet til éi byggjemappe, og den andre viser kva delt bibliotek den resulterande binæren lastar ved køyring. Eit bygg som lenkjer mot det tiltenkte prefikset, og ein binær som lastar eit anna, er eit køyretidsstiproblem, ikkje eit søkjeproblem, og det krev ei avgjerd om rpath eller lastarkonfigurasjon i staden for nok eit konfigurasjonsflagg.

Hald desse vala lokale for bygget. Å bytte ut systembibliotek eller redigere globale pkg-config-filer for å tilfredsstille eitt prosjekt er måten eit fungerande skrivebord blir eit øydelagt eit. Ei byggjemappe som registrerer prefikset, er reproduserbar; ei endring for heile maskinen er ei støttesak som ventar på neste prosjekt. Slett byggjemappa når du endrar hintet, slik at bufferen ikkje kan halde på det gamle svaret.

Vit når kjelda er problemet

Eit vellukka konfigurasjonstrinn beviser berre at kontrollane vart fullførte. Kompilering kan framleis avvise ein API som kjelda ventar, og lenking kan framleis feile på eit manglande symbol. Ta vare på den første konkrete feilen frå kvart trinn, fordi dei seinare vanlegvis er følgjer.

OpenSSL 3 gjorde fleire grensesnitt utdaterte og fjerna dei, grensesnitt som eldre VPN-klientar brukar direkte, så eit kjeldekodetre frå den tida kan trenge reelle endringar i staden for ein ny inkluderingssti. Om vedlikehaldarane støttar ein gjeldande utgiving, bruk den. Om ikkje, høyrer avgjerda til den som eig tenesta, ikkje til eit søk etter eit eldre bibliotekfilnamn.

Valfrie skrivebordskomponentar har òg sine eigne krav. Eit kommandolinjemål som konfigurerer seg reint, seier ingenting om korvidt GUI-verktøysettet og editoren blir bygde, så handsam ei gammal Qt-pakkeliste som historie og ikkje som spesifikasjon. Sjekk eigne val i kjeldeversjonen for kva grensesnitt som er aktiverte som standard. Bygg deretter berre det du treng, fordi kvar valfri avhengigheit er nok eit søkjeproblem som ventar på å skje.

Relaterte artiklar