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.
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 DeploymentMembuat 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 LinkingDua 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 BuildChecklist build untuk pengguna: flag -O2 dan -DNDEBUG, strip untuk membuang simbol, menyimpan debug info terpisah, penyematan versi, dan konsep reproducible builds.
Buka → # Cross-compilationMembangun biner untuk arsitektur lain dari mesin yang sama: target triple, toolchain terpisah, sysroot, toolchain file CMake, dan verifikasi hasil dengan file.
Buka → # WebAssembly dan EmscriptenMembawa 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 LinuxMenyalurkan aplikasi ke pengguna Linux: struktur FHS, merakit paket .deb sungguhan dengan dpkg-deb, tarball reproducible, dan bundle mandiri AppImage.
Buka → # Deployment di WindowsAturan distribusi aplikasi C++ di Windows: pilihan toolchain, runtime MSVC dan vcredist, penempatan DLL, installer WiX/NSIS, portable apps, dan code signing.
Buka → # Deployment di macOSMenyalurkan 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 ReleaseMengelola identitas rilis: semantic versioning MAJOR.MINOR.PATCH, changelog, git tag, release notes, janji API/ABI, dan otomasi pemeriksaan versi.
Buka → # Packaging AplikasiMerakit 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 DockerMembungkus 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 →