Терминал са задовољством извештава о верзији 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 извештава који је директоријум include и које библиотеке пронашао, и не успева са конкретном поруком када недостаје обавезна компонента.

Потврдите коју верзију модула пројекат користи, јер копија упакована у стаблу изворног кода може се понашати другачије од оне која се испоручује са инсталираним 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 клијенти користе директно, па стабло изворног кода из тог доба може захтевати стварне измене уместо нове include путање. Ако одржаваоци подржавају актуелно издање, користите га. Ако не, одлука припада ономе ко поседује услугу, а не тражењу старијег имена библиотечке датотеке.

Опционе компоненте радне површине такође имају своје захтеве. Циљ командне линије који се чисто конфигурише не говори ништа о томе да ли ће се GUI алатни скуп и едитор изградити, зато стари списак Qt пакета третирајте као историју, а не као спецификацију. Проверите сопствене опције ревизије изворног кода за то који су интерфејси подразумевано укључени. Затим изградите само оно што вам треба, јер је свака опциона зависност још један проблем откривања који чека да се догоди.

Повезани чланци