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

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

Distribucija dijeli OpenSSL na paket za vrijeme izvršavanja koji daje dijeljenu biblioteku i alat komandne linije, te razvojni paket koji daje zaglavlja, neverzirana imena za povezivanje i pkg-config metapodatke. Instaliranje prvog ne instalira drugi, a kompajleru treba samo drugi.

Provjerite šta je zaista prisutno, a ne šta se sjećate da ste instalirali. Na sistemima baziranim na Debianu razvojni paket je obično libssl-dev, dok je vrijeme izvršavanja verzirani bibliotečki paket plus openssl binarni fajl.

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

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

Pročitajte vlastiti izlaz otkrivanja builda

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

Potvrdite koju verziju modula projekt koristi, jer ugrađena kopija unutar stabla izvornog koda može se ponašati drugačije od one koja dolazi s instaliranim CMakeom. Zatim pročitajte spisak 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 ponovo konfiguriše od nule, a druga pokazuje keširane rezultate, uključujući svaki korijenski direktorij ili bibliotečku putanju na kojoj se modul zaustavio. Ako keš pokazuje na stari prefiks iz prethodnog pokušaja, izbrišite build direktorij i konfigurišite ponovo, umjesto da ručno mijenjate vrijednosti. Zastarjeli unosi u kešu čest su uzrok neuspjeha koji preživi ispravnu popravku.

Usmjerite build na ispravnu instalaciju, usko

Kada odobreni OpenSSL živi izvan zadane putanje pretrage, FindOpenSSL dokumentuje OPENSSL_ROOT_DIR kao nagovještaj za taj konkretni build. Na sistemima sličnim Unixu također konsultuje pkg-config, 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ći binarni fajl učitati za vrijeme izvršavanja. Build koji se povezuje s namjeravanim prefiksom i binarni fajl koji 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, a ne još jedan flag konfiguracije.

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

Znajte kada je problem u izvornom kodu

Uspješan korak konfiguracije dokazuje samo da su provjere završ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 kasnije su obično posljedice.

OpenSSL 3 je označio kao zastarjele i uklonio nekoliko interfejsa koje stariji VPN klijenti koriste direktno, pa stablo izvornog koda iz tog doba može zahtijevati stvarne promjene, a ne novu include putanju. Ako održavaoci podržavaju aktuelno izdanje, koristite ga. Ako ne, odluka pripada onome ko posjeduje uslugu, a ne traženju starijeg imena bibliotečke datoteke.

Opcione desktop komponente također imaju svoje zahtjeve. Cilj komandne linije koji se čisto konfiguriše ne govori ništa o tome da li će se GUI alatni set i editor izgraditi, pa stari spisak Qt paketa tretirajte kao historiju, a ne kao specifikaciju. Provjerite vlastite opcije revizije izvornog koda za to koji su interfejsi podrazumijevano uključeni. Zatim izgradite samo ono što vam treba, jer je svaka opciona zavisnost još jedan problem otkrivanja koji čeka da se dogodi.

Povezani članci