Terminal dengan senang hati melaporkan versi OpenSSL, dan pohon sumber tetap gagal dengan pesan tentang header kripto yang hilang. Kedua pernyataan benar sekaligus, karena alat runtime dan sekumpulan input build dikirim secara terpisah. Lakukan keempat pemeriksaan ini secara berurutan: paket terpasang, keluaran penemuan, jalur pencarian, lalu apakah sumbernya sendiri kompatibel. Berhenti pada pemeriksaan pertama yang menjelaskan kegagalan, bukan menempelkan daftar dependensi lama.

Runtime dan input build adalah paket yang berbeda

Sebuah distribusi membagi OpenSSL menjadi paket runtime yang menyediakan pustaka bersama dan alat baris perintah, serta paket pengembangan yang menyediakan header, nama penaut tanpa versi, dan metadata pkg-config. Memasang yang pertama tidak memasang yang kedua, dan kompiler hanya membutuhkan yang kedua.

Periksa apa yang benar-benar ada, bukan apa yang Anda ingat telah dipasang. Pada sistem turunan Debian paket pengembangan biasanya libssl-dev, sedangkan runtime adalah paket pustaka berversi ditambah biner openssl.

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

Perintah pertama menunjukkan mana dari ketiganya yang terpasang, perintah kedua melaporkan versi yang akan ditemukan sistem build melalui pkg-config, dan perintah ketiga melaporkan versi runtime. Baris yang hilang pada keluaran pertama langsung menjelaskan kesalahan. Ketidakcocokan versi antara yang kedua dan ketiga adalah masalah lain, dan biasanya berarti dua pemasangan saling bersaing.

Baca keluaran penemuan milik build itu sendiri

Sebagian besar kegagalan terlihat di log konfigurasi jika Anda membacanya sebelum ringkasan. Modul FindOpenSSL milik CMake melaporkan direktori include dan pustaka mana yang ditemukannya, dan modul itu gagal dengan pesan khusus ketika komponen wajib tidak ada.

Pastikan versi modul mana yang dipakai proyek, karena salinan yang dibundel di dalam pohon sumber dapat berperilaku berbeda dari yang dikirim bersama CMake terpasang. Lalu baca daftar komponen: proyek yang hanya meminta Crypto tidak membutuhkan pustaka SSL, dan proyek yang meminta SSL akan gagal jika hanya sebagian paket pengembangan yang tersedia.

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

Perintah pertama mengonfigurasi ulang dari awal, dan perintah kedua menunjukkan hasil yang di-cache, termasuk direktori akar atau jalur pustaka yang dipilih modul. Jika cache menunjuk ke prefiks lama dari percobaan sebelumnya, hapus direktori build dan konfigurasi ulang alih-alih menyunting nilai secara manual. Entri cache yang usang adalah penyebab umum kegagalan yang bertahan setelah perbaikan yang benar.

Arahkan build ke pemasangan yang tepat, secara sempit

Ketika OpenSSL yang disetujui berada di luar jalur pencarian bawaan, FindOpenSSL mendokumentasikan OPENSSL_ROOT_DIR sebagai petunjuk untuk build tertentu itu. Pada sistem mirip Unix ia juga menanyakan pkg-config, sehingga PKG_CONFIG_PATH yang sesuai dapat membantu tanpa mengubah apa pun secara global.

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

Perintah pertama membatasi petunjuk pada satu direktori build, dan perintah kedua menunjukkan pustaka bersama mana yang akan dimuat biner hasilnya saat runtime. Build yang menautkan ke prefiks yang dimaksud dan biner yang memuat pustaka lain adalah masalah jalur runtime, bukan masalah penemuan, dan memerlukan keputusan rpath atau konfigurasi loader, bukan flag konfigurasi lain.

Jaga pilihan ini tetap lokal pada build. Mengganti pustaka sistem atau menyunting berkas pkg-config global untuk memuaskan satu proyek adalah cara desktop yang berfungsi menjadi rusak. Direktori build yang mencatat prefiks dapat direproduksi; perubahan seluruh mesin adalah insiden dukungan yang menunggu proyek berikutnya. Hapus direktori build saat Anda mengubah petunjuk, agar cache tidak dapat menyimpan jawaban lama.

Ketahui kapan sumbernya yang bermasalah

Langkah konfigurasi yang berhasil hanya membuktikan bahwa pemeriksaan selesai. Kompilasi masih dapat menolak API yang diharapkan sumber, dan penautan masih dapat gagal karena simbol yang hilang. Simpan kesalahan spesifik pertama dari setiap tahap, karena kesalahan berikutnya biasanya akibat.

OpenSSL 3 menyatakan usang dan menghapus beberapa antarmuka yang dipakai langsung oleh klien VPN lama, sehingga pohon sumber dari era itu mungkin memerlukan perubahan nyata, bukan jalur include baru. Jika pemelihara mendukung rilis terkini, gunakan itu. Jika tidak, keputusan ada pada pemilik layanan, bukan pada pencarian nama berkas pustaka yang lebih lama.

Komponen desktop opsional juga punya persyaratannya sendiri. Target baris perintah yang terkonfigurasi bersih tidak menjelaskan apakah toolkit GUI dan editor akan terbangun, jadi perlakukan daftar paket Qt lama sebagai sejarah, bukan sebagai spesifikasi. Periksa opsi revisi sumber itu sendiri untuk melihat antarmuka mana yang diaktifkan secara bawaan. Lalu bangun hanya yang Anda butuhkan, karena setiap dependensi opsional adalah masalah penemuan lain yang menunggu terjadi.

Artikel terkait