Proč příkaz openssl funguje, ale sestavení VPN selhává
Funkční binárka openssl neříká nic o hlavičkách ani knihovnách pro propojení. Prověřte vývojový balíček, cílovou architekturu a protokol rozpoznání při sestavení.
Terminál ochotně nahlásí verzi OpenSSL, a strom zdrojového kódu přesto selhává se zprávou o chybějících kryptografických hlavičkách. Obě tvrzení platí současně, protože nástroj běhového prostředí a sada vstupů pro sestavení se dodávají odděleně. Proveďte tyto čtyři kontroly v pořadí: nainstalované balíčky, výstup rozpoznání, cesty hledání a nakonec to, zda je samotný zdrojový kód kompatibilní. Zastavte se u první kontroly, která selhání vysvětlí, místo abyste vkládali starý seznam závislostí.
Běhové prostředí a vstupy pro sestavení jsou různé balíčky
Distribuce dělí OpenSSL na balíček běhového prostředí, který poskytuje sdílenou knihovnu a nástroj příkazového řádku, a vývojový balíček, který poskytuje hlavičky, neverzované názvy pro propojení a metadata pkg-config. Instalace prvního nenainstaluje druhý a kompilátor potřebuje jen druhý.
Zkontrolujte, co skutečně existuje, ne co si pamatujete, že jste nainstalovali. V systémech odvozených z Debianu bývá vývojový balíček obvykle libssl-dev, zatímco běhové prostředí je verzovaný knihovní balíček plus binárka openssl.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
První příkaz ukazuje, který ze tří je nainstalovaný, druhý hlásí verzi, kterou systém sestavení objeví přes pkg-config, a třetí hlásí verzi běhového prostředí. Chybějící řádek v prvním výstupu chybu vysvětlí okamžitě. Rozdíl verzí mezi druhým a třetím je jiný problém a obvykle znamená, že si konkurují dvě instalace.
Přečtěte si vlastní výstup rozpoznání ze sestavení
Většina selhání je vidět v konfiguračním protokolu, pokud ho přečtete dřív než shrnutí. Modul FindOpenSSL v CMake hlásí, který adresář pro vkládání a které knihovny našel, a selhává s konkrétní zprávou, když povinná komponenta chybí.
Potvrďte, kterou verzi modulu projekt používá, protože přiložená kopie uvnitř stromu zdrojového kódu se může chovat jinak než ta, která se dodává s nainstalovaným CMake. Potom si přečtěte seznam komponent: projekt, který žádá jen Crypto, knihovnu SSL nepotřebuje, a projekt, který žádá SSL, selže, pokud je přítomna jen část vývojového balíčku.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
První příkaz překonfiguruje od nuly a druhý ukáže uložené výsledky včetně kořenového adresáře nebo cesty ke knihovně, na které se modul ustálil. Pokud mezipaměť ukazuje na starý prefix z předchozího pokusu, smažte adresář sestavení a nakonfigurujte znovu, místo abyste hodnoty upravovali ručně. Zastaralé položky mezipaměti jsou častou příčinou selhání, které přežije správnou opravu.
Nasměrujte sestavení na správnou instalaci, úzce
Když schválený OpenSSL sídlí mimo výchozí cestu hledání, FindOpenSSL dokumentuje OPENSSL_ROOT_DIR jako nápovědu pro toto konkrétní sestavení. V systémech podobných Unixu se také ptá pkg-config, takže vhodná PKG_CONFIG_PATH může pomoci, aniž by cokoli měnila globálně.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
První příkaz omezuje nápovědu na jeden adresář sestavení a druhý ukazuje, kterou sdílenou knihovnu výsledná binárka za běhu načte. Sestavení, které se propojí s zamýšleným prefixem, a binárka, která načte jiný, je problém cesty za běhu, ne problém rozpoznání, a vyžaduje rozhodnutí o rpath nebo konfiguraci zavaděče, ne další konfigurační přepínač.
Tyto volby udržujte lokální pro sestavení. Nahrazování systémových knihoven nebo úpravy globálních souborů pkg-config, aby se zalíbilo jednomu projektu, je způsob, jak se z funkční plochy stane rozbitá. Adresář sestavení, který zaznamenává prefix, je reprodukovatelný; změna pro celý stroj je incident podpory, který čeká na další projekt. Při změně nápovědy adresář sestavení smažte, aby si mezipaměť nemohla ponechat starou odpověď.
Vězte, kdy je problém ve zdrojovém kódu
Úspěšný konfigurační krok dokazuje jen to, že kontroly proběhly. Kompilace stále může odmítnout API, které zdrojový kód očekává, a propojení stále může selhat kvůli chybějícímu symbolu. Uchovejte první konkrétní chybu z každé fáze, protože ty pozdější jsou obvykle důsledky.
OpenSSL 3 označil za zastaralé a odstranil několik rozhraní, která starší klienti VPN používají přímo, takže strom zdrojového kódu z té doby může potřebovat skutečné změny, ne novou cestu pro vkládání. Pokud správci podporují aktuální vydání, použijte ho. Pokud ne, rozhodnutí patří tomu, kdo službu vlastní, ne hledání staršího názvu knihovního souboru.
Volitelné komponenty plochy mají také své požadavky. Cíl příkazového řádku, který se čistě nakonfiguruje, nic neříká o tom, zda se sestaví sada nástrojů GUI a editor, takže starý seznam balíčků Qt berte jako historii, ne jako specifikaci. Zkontrolujte vlastní volby revize zdrojového kódu, která rozhraní jsou ve výchozím stavu zapnutá. Potom sestavte jen to, co potřebujete, protože každá volitelná závislost je další problém s rozpoznáním, který čeká, až nastane.