Terminal spremno prijavljuje verziju OpenSSL-a, a stablo izvornog koda i dalje ne uspijeva s porukom o nedostajućim kripto zaglavljima. Obje su tvrdnje istovremeno točne jer se alat za vrijeme izvršavanja i skup ulaza za build isporučuju odvojeno. Provedite ove četiri provjere redom: instalirani paketi, izlaz otkrivanja, putanje pretrage, a zatim je li sam izvorni kod kompatibilan. Zaustavite se na prvoj koja objašnjava neuspjeh umjesto da zalijepite stari popis ovisnosti.

Vrijeme izvršavanja i ulazi za build različiti su paketi

Distribucija dijeli OpenSSL na paket za vrijeme izvršavanja koji daje dijeljenu biblioteku i alat naredbenog retka, te razvojni paket koji daje zaglavlja, neverzirana imena poveznica i pkg-config metapodatke. Instalacija prvoga ne instalira drugi, a prevoditelju treba samo drugi.

Provjerite što je doista prisutno, a ne što se sjećate da ste instalirali. Na sustavima temeljenima na Debianu razvojni je paket obično libssl-dev, dok je vrijeme izvršavanja verzionirani bibliotečni paket plus openssl binarna datoteka.

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

Prva naredba pokazuje koji je od troje instaliran, druga prijavljuje verziju koju će build sustav otkriti preko pkg-configa, a treća prijavljuje verziju za vrijeme izvršavanja. Redak koji nedostaje u prvom izlazu odmah objašnjava grešku. Nesklad verzija između druge i treće drugi je problem i obično znači da se dvije instalacije natječu.

Pročitajte vlastiti izlaz otkrivanja builda

Većina je neuspjeha vidljiva u dnevniku konfiguracije ako ga pročitate prije sažetka. CMakeov modul FindOpenSSL prijavljuje koji je include direktorij i koje biblioteke pronašao, a ne uspijeva s konkretnom porukom kad nedostaje obavezna komponenta.

Potvrdite koju verziju modula projekt rabi jer se ugrađena kopija unutar stabla izvornog koda može ponašati drukčije od one koja dolazi s instaliranim CMakeom. Zatim pročitajte popis komponenti: projekt koji traži samo Crypto ne treba SSL biblioteku, a onaj koji traži SSL neće uspjeti ako je prisutan samo dio razvojnog paketa.

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

Prva naredba ponovno konfigurira od nule, a druga pokazuje predmemorirane rezultate, uključujući svaki korijenski direktorij ili bibliotečnu putanju na kojoj se modul zaustavio. Ako predmemorija pokazuje na stari prefiks iz prethodnog pokušaja, izbrišite build direktorij i konfigurirajte ponovno umjesto ručnog uređivanja vrijednosti. Zastarjeli unosi predmemorije čest su uzrok neuspjeha koji nadživi ispravan popravak.

Usmjerite build na ispravnu instalaciju, usko

Kad odobreni OpenSSL živi izvan zadane putanje pretrage, FindOpenSSL dokumentira OPENSSL_ROOT_DIR kao nagovještaj za taj konkretni build. Na sustavima sličnima Unixu također se savjetuje s pkg-configom, pa odgovarajući PKG_CONFIG_PATH može pomoći bez ikakve globalne promjene.

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

Prva naredba ograničava nagovještaj na jedan build direktorij, a druga pokazuje koju će dijeljenu biblioteku rezultirajuća binarna datoteka učitati za vrijeme izvršavanja. Build koji se povezuje s namjeravanim prefiksom i binarna datoteka koja učitava drugi predstavljaju problem putanje za vrijeme izvršavanja, a ne problem otkrivanja, i traže odluku o rpathu ili konfiguraciji učitavača umjesto još jedne konfiguracijske zastavice.

Držite te izbore lokalnima za build. Zamjena sistemskih biblioteka ili uređivanje globalnih pkg-config datoteka da bi se zadovoljio jedan projekt način je na koji radna površina koja radi postaje pokvarena. Build direktorij koji bilježi prefiks je ponovljiv; promjena na razini cijelog stroja incident je podrške koji čeka sljedeći projekt. Izbrišite build direktorij kad promijenite nagovještaj, da predmemorija ne može zadržati stari odgovor.

Znajte kada je problem u izvornom kodu

Uspješan korak konfiguracije dokazuje samo da su provjere dovršene. Kompilacija i dalje može odbiti API koji izvorni kod očekuje, a povezivanje i dalje može pasti zbog simbola koji nedostaje. Sačuvajte prvu konkretnu grešku iz svake faze jer su kasnije obično posljedice.

OpenSSL 3 označio je zastarjelima i uklonio nekoliko sučelja koja stariji VPN klijenti rabe izravno, pa stablo izvornog koda iz tog doba može zahtijevati stvarne promjene umjesto nove include putanje. Ako održavatelji podržavaju aktualno izdanje, rabite ga. Ako ne, odluka pripada onome tko posjeduje uslugu, a ne traženju starijeg imena bibliotečne datoteke.

Neobavezni dijelovi radne površine također imaju svoje zahtjeve. Cilj naredbenog retka koji se čisto konfigurira ne govori ništa o tome hoće li se GUI alatni set i editor izgraditi, pa stari popis Qt paketa tretirajte kao povijest, a ne kao specifikaciju. Provjerite vlastite opcije revizije izvornog koda za to koja su sučelja podrazumijevano uključena. Zatim izgradite samo ono što vam treba jer je svaka neobavezna ovisnost još jedan problem otkrivanja koji čeka da se dogodi.

Povezani članci