Terminalas mielai praneša OpenSSL versiją, o šaltinio medis vis tiek nepavyksta su pranešimu apie trūkstamas kriptografijos antraštes. Abu teiginiai teisingi vienu metu, nes vykdymo įrankis ir kompiliavimo įvestys tiekiami atskirai. Atlikite šiuos keturis patikrinimus iš eilės: įdiegti paketai, paieškos išvestis, paieškos keliai ir galiausiai tai, ar pats šaltinis suderinamas. Sustokite ties pirmuoju, kuris paaiškina nesėkmę, o ne įklijuokite seną priklausomybių sąrašą.

Vykdymo aplinka ir kompiliavimo įvestys yra skirtingi paketai

Distribucija padalija OpenSSL į vykdymo paketą, teikiantį bendrą biblioteką ir komandų eilutės įrankį, ir kūrimo paketą, teikiantį antraštes, neversijuotus susiejimo vardus ir pkg-config metaduomenis. Pirmojo įdiegimas neįdiegia antrojo, o kompiliatoriui reikia tik antrojo.

Patikrinkite, kas iš tikrųjų yra, o ne ką prisimenate įdiegę. Debian pagrindu veikiančiose sistemose kūrimo paketas paprastai yra libssl-dev, o vykdymo aplinka yra versijuotas bibliotekos paketas ir openssl dvejetainis failas.

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

Pirmoji komanda parodo, kuris iš trijų įdiegtas, antroji praneša versiją, kurią kompiliavimo sistema ras per pkg-config, o trečioji praneša vykdymo versiją. Trūkstama eilutė pirmoje išvestyje iš karto paaiškina klaidą. Versijų neatitikimas tarp antrosios ir trečiosios yra kita problema ir paprastai reiškia, kad konkuruoja dvi instaliacijos.

Skaitykite pačios kompiliavimo paieškos išvestį

Dauguma nesėkmių matomos konfigūravimo žurnale, jei jį perskaitysite prieš santrauką. CMake modulis FindOpenSSL praneša, kurį include katalogą ir kokias bibliotekas rado, ir nepavyksta su konkrečiu pranešimu, kai trūksta privalomo komponento.

Patvirtinkite, kurią modulio versiją naudoja projektas, nes šaltinio medyje įtraukta kopija gali elgtis kitaip nei ta, kuri tiekiama su įdiegtu CMake. Tada perskaitykite komponentų sąrašą: projektui, kuris prašo tik Crypto, SSL bibliotekos nereikia, o prašantis SSL nepavyks, jei yra tik dalis kūrimo paketo.

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

Pirmoji komanda iš naujo sukonfigūruoja nuo nulio, o antroji parodo podėlyje saugomus rezultatus, įskaitant bet kurį šakninį katalogą ar bibliotekos kelią, ties kuriuo modulis sustojo. Jei podėlis rodo į seną ankstesnio bandymo prefiksą, ištrinkite kompiliavimo katalogą ir sukonfigūruokite iš naujo, o ne redaguokite reikšmes rankiniu būdu. Pasenę podėlio įrašai yra dažna nesėkmės, kuri išlieka po teisingo pataisymo, priežastis.

Nukreipkite kompiliavimą į teisingą instaliaciją, siaurai

Kai patvirtintas OpenSSL yra už numatytojo paieškos kelio, FindOpenSSL dokumentuoja OPENSSL_ROOT_DIR kaip užuominą būtent tam kompiliavimui. Unix tipo sistemose jis taip pat klausia pkg-config, todėl tinkamas PKG_CONFIG_PATH gali padėti nieko globaliai nekeičiant.

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

Pirmoji komanda apriboja užuominą vienu kompiliavimo katalogu, o antroji parodo, kurią bendrą biblioteką gautas dvejetainis failas įkels vykdymo metu. Kompiliavimas, susietas su numatytu prefiksu, ir dvejetainis failas, įkeliantis kitą, yra vykdymo kelio problema, o ne paieškos problema, ir jai reikia sprendimo dėl rpath ar įkėlėjo konfigūracijos, o ne dar vieno konfigūravimo vėliavėlės.

Laikykite šiuos pasirinkimus vietinius kompiliavimui. Sistemos bibliotekų keitimas ar globalių pkg-config failų redagavimas vienam projektui patenkinti yra kelias, kuriuo veikiantis darbalaukis tampa sugedusiu. Kompiliavimo katalogas, kuriame įrašytas prefiksas, yra atkartojamas; visos mašinos pakeitimas yra palaikymo incidentas, laukiantis kito projekto. Ištrinkite kompiliavimo katalogą, kai keičiate užuominą, kad podėlis negalėtų išlaikyti seno atsakymo.

Žinokite, kada problema yra šaltinyje

Sėkmingas konfigūravimo žingsnis įrodo tik tai, kad patikrinimai baigti. Kompiliavimas vis tiek gali atmesti API, kurio tikisi šaltinis, o susiejimas vis tiek gali nepavykti dėl trūkstamo simbolio. Išsaugokite pirmąją konkrečią kiekvieno etapo klaidą, nes vėlesnės paprastai yra pasekmės.

OpenSSL 3 paskelbė pasenusiais ir pašalino kelis sąsajas, kurias senesni VPN klientai naudoja tiesiogiai, todėl tos eros šaltinio mediui gali prireikti tikrų pakeitimų, o ne naujo include kelio. Jei prižiūrėtojai palaiko dabartinį leidimą, naudokite jį. Jei ne, sprendimas priklauso tam, kas valdo paslaugą, o ne senesnio bibliotekos failo vardo paieškai.

Pasirenkami darbalaukio komponentai taip pat turi savo reikalavimus. Tvarkingai sukonfigūruojamas komandų eilutės tikslas nieko nesako apie tai, ar bus sukompiliuotas GUI įrankių rinkinys ir redaktorius, todėl seną Qt paketų sąrašą traktuokite kaip istoriją, o ne kaip specifikaciją. Patikrinkite pačios šaltinio versijos parinktis, kurios sąsajos įjungtos pagal numatytuosius nustatymus. Tada sukompiliuokite tik tai, ko jums reikia, nes kiekviena pasirenkama priklausomybė yra dar viena paieškos problema, laukianti įvykstant.

Susiję straipsniai