A terminál készségesen jelent egy OpenSSL-verziót, a forrásfa pedig továbbra is elbukik a hiányzó kripto-fejlécekről szóló üzenettel. Mindkét állítás egyszerre igaz, mert a futásidejű eszköz és a fordítási bemenetek halmaza külön kerül kiszállításra. Végezze el ezt a négy ellenőrzést sorrendben: telepített csomagok, felderítési kimenet, keresési útvonalak, végül pedig az, hogy maga a forrás kompatibilis-e. Álljon meg az elsőnél, amely megmagyarázza a hibát, ahelyett hogy egy régi függőséglistát illesztene be.

A futásidejű környezet és a fordítási bemenetek külön csomagok

Egy disztribúció az OpenSSL-t futásidejű csomagra bontja, amely a megosztott könyvtárat és a parancssori eszközt adja, valamint fejlesztői csomagra, amely a fejléceket, a verzió nélküli kapcsolási neveket és a pkg-config metaadatokat adja. Az első telepítése nem telepíti a másodikat, és a fordítónak csak a másodikra van szüksége.

Ellenőrizze, mi van valóban jelen, ne azt, amire emlékszik, hogy telepített. A Debian-alapú rendszereken a fejlesztői csomag általában libssl-dev, míg a futásidejű a verziózott könyvtár-csomag plusz a openssl bináris.

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

Az első parancs megmutatja, melyik van telepítve a három közül, a második jelenti azt a verziót, amelyet a fordítási rendszer a pkg-config segítségével talál meg, a harmadik pedig a futásidejű verziót jelenti. Az első kimenetből hiányzó sor azonnal megmagyarázza a hibát. A második és a harmadik közötti verzióeltérés más probléma, és általában azt jelenti, hogy két telepítés verseng.

Olvassa el a fordítás saját felderítési kimenetét

A legtöbb hiba látható a konfigurációs naplóban, ha az összefoglaló előtt elolvassa. A CMake FindOpenSSL modulja jelenti, melyik include-könyvtárat és mely könyvtárakat találta meg, és konkrét üzenettel bukik el, ha egy szükséges összetevő hiányzik.

Erősítse meg, melyik modulverziót használja a projekt, mert a forrásfán belül becsomagolt másolat másképp viselkedhet, mint az a telepített CMake-hez mellékelt példány. Ezután olvassa el az összetevők listáját: a csak Crypto-t kérő projektnek nincs szüksége az SSL könyvtárra, és az SSL-t kérő projekt elbukik, ha a fejlesztői csomagnak csak egy része van jelen.

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

Az első parancs elölről konfigurál újra, a második pedig a gyorsítótárazott eredményeket mutatja, beleértve minden gyökérkönyvtárat vagy könyvtárútvonalat, amelynél a modul megállapodott. Ha a gyorsítótár egy korábbi kísérlet régi előtagjára mutat, törölje a fordítási könyvtárat és konfiguráljon újra, ahelyett hogy kézzel szerkesztené az értékeket. Az elavult gyorsítótár-bejegyzések gyakori okozói a helyes javítás után is fennmaradó hibának.

Irányítsa a fordítást a helyes telepítésre, szűken

Amikor egy jóváhagyott OpenSSL az alapértelmezett keresési útvonalon kívül él, a FindOpenSSL dokumentálja a OPENSSL_ROOT_DIR változót épp annak a fordításnak szóló tippként. Unix-szerű rendszereken a pkg-configot is megkérdezi, így egy megfelelő PKG_CONFIG_PATH segíthet anélkül, hogy bármit globálisan megváltoztatna.

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

Az első parancs egyetlen fordítási könyvtárra szűkíti a tippet, a második pedig megmutatja, melyik megosztott könyvtárat tölti be a létrejövő bináris futásidőben. Az a fordítás, amely a szándékolt előtaghoz kapcsolódik, és az a bináris, amely egy másikat tölt be, futásidejű útvonalprobléma, nem felderítési probléma, és rpath- vagy betöltő-konfigurációs döntést igényel egy újabb konfigurációs kapcsoló helyett.

Tartsa ezeket a választásokat a fordításra helyiekben. A rendszerkönyvtárak lecserélése vagy globális pkg-config fájlok szerkesztése egyetlen projekt kedvéért az az út, amelyen egy működő asztal tönkrement asztallá válik. A fordítást rögzítő könyvtár reprodukálható; egy gépszintű változtatás egy támogatási esemény, amely a következő projektre vár. Törölje a fordítási könyvtárat, amikor megváltoztatja a tippet, hogy a gyorsítótár ne tarthassa meg a régi választ.

Tudja, mikor maga a forrás a probléma

Egy sikeres konfigurálási lépés csak azt bizonyítja, hogy az ellenőrzések befejeződtek. A fordítás továbbra is elutasíthat egy API-t, amelyet a forrás vár, és a kapcsolás továbbra is elbukhat egy hiányzó szimbólum miatt. Őrizze meg minden szakasz első konkrét hibáját, mert a későbbiek általában következmények.

Az OpenSSL 3 elavultnak nyilvánított és eltávolított több olyan interfészt, amelyet a régebbi VPN kliensek közvetlenül használnak, ezért az abból a korszakból származó forrásfa valódi változtatásokat igényelhet új include-útvonal helyett. Ha a karbantartók támogatnak egy jelenlegi kiadást, használja azt. Ha nem, a döntés azt illeti, aki a szolgáltatás tulajdonosa, nem egy régebbi könyvtárfájlnév keresését.

Az opcionális asztali összetevőknek is megvannak a maguk követelményei. Egy tisztán konfigurálódó parancssori cél semmit sem mond arról, hogy a GUI eszközkészlet és a szerkesztő felépül-e, ezért a régi Qt csomaglistát történelemként kezelje, ne specifikációként. Ellenőrizze a forrásváltozat saját beállításait arról, mely interfészek vannak alapértelmezés szerint engedélyezve. Ezután csak azt fordítsa le, amire szüksége van, mert minden opcionális függőség egy újabb felderítési probléma, amely megtörténésre vár.

Kapcsolódó cikkek