Зошто наредбата openssl работи, а градењето на VPN не успева
Работна openssl бинарна датотека не кажува ништо за заглавјата и библиотеките за поврзување. Проверете го пакетот за развој, целната архитектура и дневникот за откривање на градењето.
Терминалот со задоволство известува за верзија на OpenSSL, а дрвото на изворниот код сѐ уште не успева со порака за исчезнати крипто заглавја. Двете тврдења се точни истовремено, бидејќи алатката за извршување и множеството влезови за градење се доставуваат одделно. Изведете ги овие четири проверки по ред: инсталирани пакети, излез од откривањето, патеки за пребарување и на крајот дали самиот изворен код е компатибилен. Запрете на првата што го објаснува неуспехот наместо да залепите стар список на зависности.
Времето на извршување и влезовите за градење се различни пакети
Дистрибуцијата го дели OpenSSL на пакет за време на извршување што ја обезбедува споделената библиотека и алатката за командна линија, и пакет за развој што ги обезбедува заглавјата, неверсионираните имиња за поврзување и метаподатоците на pkg-config. Инсталирањето на првиот не го инсталира вториот, а компајлерот му треба само вториот.
Проверете што навистина е присутно, а не што се сеќавате дека сте инсталирале. На системите базирани на Debian пакетот за развој обично е libssl-dev, додека времето на извршување е верзиониран библиотечен пакет плус бинарната датотека openssl.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Првата наредба покажува кој од трите е инсталиран, втората ја известува верзијата што системот за градење ќе ја открие преку pkg-config, а третата ја известува верзијата за време на извршување. Ред што недостасува во првиот излез веднаш ја објаснува грешката. Несовпаѓање на верзиите помеѓу втората и третата е друг проблем и обично значи дека се натпреваруваат две инсталации.
Прочитајте го сопствениот излез за откривање на градењето
Повеќето неуспеси се видливи во дневникот за конфигурирање ако го прочитате пред резимето. Модулот FindOpenSSL на CMake известува кој директориум за вклучување и кои библиотеки ги нашол, и не успева со конкретна порака кога недостасува потребна компонента.
Потврдете која верзија на модулот ја користи проектот, бидејќи копија спакувана во дрвото на изворниот код може да се однесува поинаку од онаа што се доставува со инсталираниот CMake. Потоа прочитајте го списокот на компоненти: проект што бара само Crypto не ја потребува библиотеката SSL, а оној што бара SSL ќе не успее ако е присутен само дел од пакетот за развој.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Првата наредба преконфигурира од нула, а втората ги покажува кешираните резултати, вклучително секој коренски директориум или патека до библиотека на која модулот застана. Ако кешот покажува на стара претставка од претходен обид, избришете го директориумот за градење и конфигурирајте повторно наместо рачно да ги менувате вредностите. Застарените записи во кешот се честа причина за неуспех што го преживува точното поправање.
Насочете го градењето кон точната инсталација, тесно
Кога одобрен OpenSSL живее надвор од стандардната патека за пребарување, FindOpenSSL го документира OPENSSL_ROOT_DIR како навестување за токму тоа градење. На системи слични на Unix тој исто така го пращува pkg-config, така што соодветен PKG_CONFIG_PATH може да помогне без ништо глобално да се смени.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Првата наредба го ограничува навестувањето на еден директориум за градење, а втората покажува која споделена библиотека ќе ја вчита добиената бинарна датотека при извршување. Градење што се поврзува со предвидената претставка и бинарна датотека што вчитува друга претставуваат проблем со патеката при извршување, не проблем со откривањето, и бараат одлука за rpath или конфигурација на вчитувачот наместо уште еден конфигурациски флаг.
Чувајте ги овие избори локални за градењето. Замената на системски библиотеки или уредувањето глобални pkg-config датотеки за да се задоволи еден проект е патот по кој работна работна површина станува расипана. Директориум за градење што ја запишува претставката е повторлив; промена на целата машина е инцидент за поддршка што го чека следниот проект. Избришете го директориумот за градење кога ја менувате навестувањето, за да не може кешот да го задржи стариот одговор.
Знајте кога проблемот е во изворниот код
Успешен чекор на конфигурирање докажува само дека проверките се завршени. Компилацијата сѐ уште може да одбие API што изворниот код го очекува, а поврзувањето сѐ уште може да не успее поради симбол што недостасува. Зачувајте ја првата конкретна грешка од секоја фаза, бидејќи подоцнежните обично се последици.
OpenSSL 3 ги означи како застарени и отстрани неколку интерфејси што постарите VPN клиенти ги користат директно, па дрвото на изворниот код од тоа време може да бара вистински промени наместо нова патека за вклучување. Ако одржувачите поддржуваат актуелно издание, користете го. Ако не, одлуката им припаѓа на оние што го поседуваат сервисот, а не на барање постаро име на библиотечна датотека.
Опционалните компоненти на работната површина имаат свои барања. Цел на командна линија што се конфигурира чисто не кажува ништо за тоа дали ќе се изградат алатките GUI и уредувачот, затоа третирајте стариот список на Qt пакети како историја, а не како спецификација. Проверете ги сопствените опции на ревизијата на изворниот код за тоа кои интерфејси се овозможени по стандард. Потоа изградете само тоа што ви треба, бидејќи секоја опционална зависност е уште еден проблем со откривањето што чека да се случи.