Zašto naredba openssl radi, a VPN build ne uspijeva
Ispravan openssl binarni fajl ne govori ništa o zaglavljima i bibliotekama za povezivanje. Provjerite razvojni paket, ciljnu arhitekturu i dnevnik otkrivanja builda.
Terminal spremno prijavljuje verziju OpenSSL-a, a stablo izvornog koda još uvijek pada s porukom o nedostajućim kripto zaglavljima. Obje tvrdnje su tačne u isto vrijeme, jer se alat za vrijeme izvršavanja i skup ulaza za build isporučuju odvojeno. Prođite kroz ove četiri provjere po redu: instalirani paketi, izlaz otkrivanja, putanje pretrage i na kraju 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, i razvojni paket koji daje zaglavlja, neverzirana imena povezivanja i pkg-config metapodatke. Instalacija prvog ne instalira drugi, a prevodilac treba samo drugi.
Provjerite što je stvarno prisutno, a ne što se sjećate da ste instalirali. Na sistemima zasnovanim na Debianu razvojni paket je obično libssl-dev, dok je vrijeme izvršavanja verzionirani 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 kroz pkg-config, 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 je vidljiva u dnevniku konfiguracije ako ga pročitate prije sažetka. CMake modul FindOpenSSL prijavljuje koji je include direktorij i koje biblioteke pronašao, i pada 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 putanju biblioteke na kojoj se modul zaustavio. Ako keš pokazuje na stari prefiks iz prethodnog pokušaja, obriš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 konsultuje i 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 umjesto još jedne konfiguracijske zastavice.
Držite ove izbore lokalnim 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 cijeloj mašini je incident podrške koji čeka sljedeći projekt. Obriš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 zastarjelim i uklonio nekoliko interfejsa koje stariji VPN klijenti koriste direktno, pa stablo izvornog koda iz tog doba može zahtijevati stvarne promjene umjesto nove include putanje. 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đe 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 koja su interfejsa podrazumijevano uključena. Zatim izgradite samo ono što vam treba, jer je svaka opciona zavisnost još jedan problem otkrivanja koji čeka da se dogodi.