Program yang selesai dibangun masih perlu sampai ke tangan pengguna. Kita mengelola runtime dependencies, memilih static atau dynamic linking, melakukan cross-compilation, lalu menerapkan versioning dan packaging untuk tiap sistem operasi.

# Executable dan Runtime Dependencies

Apa saja yang dibutuhkan sebuah executable untuk bisa berjalan di mesin lain — dynamic linker, libc, libstdc++ — dan cara memeriksanya dengan file, ldd, serta readelf.

Buka →
# Dynamic Library Deployment

Membuat shared library sendiri, mengatasi 'libkalkulator.so => not found' dengan LD_LIBRARY_PATH dan rpath $ORIGIN, serta menempatkan library bersama aplikasi.

Buka →
# Static Linking vs Dynamic Linking

Dua strategi menyatukan program dengan library-nya: ukuran, update keamanan, startup, dan kemudahan distribusi — semuanya dibuktikan dengan biner statis dan dinamis yang dibangun nyata.

Buka →
# Release Build

Checklist build untuk pengguna: flag -O2 dan -DNDEBUG, strip untuk membuang simbol, menyimpan debug info terpisah, penyematan versi, dan konsep reproducible builds.

Buka →
# Cross-compilation

Membangun biner untuk arsitektur lain dari mesin yang sama: target triple, toolchain terpisah, sysroot, toolchain file CMake, dan verifikasi hasil dengan file.

Buka →
# WebAssembly dan Emscripten

Membawa kode C++ ke browser lewat WebAssembly: kapan porting masuk akal, cara kerja emcc, batasan sandbox memori dan I/O, serta fungsi komputasi murni yang diuji dengan g++.

Buka →
# Deployment di Linux

Menyalurkan aplikasi ke pengguna Linux: struktur FHS, merakit paket .deb sungguhan dengan dpkg-deb, tarball reproducible, dan bundle mandiri AppImage.

Buka →
# Deployment di Windows

Aturan distribusi aplikasi C++ di Windows: pilihan toolchain, runtime MSVC dan vcredist, penempatan DLL, installer WiX/NSIS, portable apps, dan code signing.

Buka →
# Deployment di macOS

Menyalurkan aplikasi ke pengguna macOS: bundle .app dan Info.plist, Gatekeeper, alur codesign dan notarization, universal binary dengan lipo, serta distribusi via Homebrew.

Buka →
# Versioning dan Release

Mengelola identitas rilis: semantic versioning MAJOR.MINOR.PATCH, changelog, git tag, release notes, janji API/ABI, dan otomasi pemeriksaan versi.

Buka →
# Packaging Aplikasi

Merakit paket rilis utuh: struktur bin/lib/share, metainformasi, tarball reproducible dengan checksum dan tanda tangan, mekanisme pembaruan, dan checklist rilis lengkap penutup section.

Buka →
# Container dengan Docker

Membungkus aplikasi C++ beserta toolchain dan libc-nya ke dalam image: Dockerfile multi-stage, pemisahan image build dan runtime, volume data, serta sesi build-run terdokumentasi.

Buka →