From e68242b8ee7d255633b648a64ee186155ddeb45d Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Wed, 19 Feb 2025 10:43:07 -0700 Subject: [PATCH] musikr: fix exception unwind linking --- musikr/src/main/jni/build.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/musikr/src/main/jni/build.rs b/musikr/src/main/jni/build.rs index 00b7b7d45..617eea86a 100644 --- a/musikr/src/main/jni/build.rs +++ b/musikr/src/main/jni/build.rs @@ -61,7 +61,7 @@ fn main() { cmake_args.extend(vec![ format!("-DANDROID_NDK_PATH={}", ndk_path), format!("-DCMAKE_TOOLCHAIN_FILE={}", ndk_toolchain.to_str().unwrap()), - format!("-DANDROID_ABI={}", arch), + format!("-DANDROID_ABI={}", arch) ]); } @@ -111,7 +111,9 @@ fn main() { arch_pkg_dir.display() ); println!("cargo:rustc-link-lib=static=tag"); - // println!("cargo:rustc-link-lib=cc++_static"); + println!("cargo:rustc-link-lib=static=c++_static"); + println!("cargo:rustc-link-lib=static=c++abi"); + println!("cargo:rustc-link-lib=unwind"); // Build the shim and cxx bridge together let mut builder = cxx_build::bridge("src/taglib/bridge.rs"); @@ -128,8 +130,12 @@ fn main() { .include(".") // Add the current directory to include path .flag_if_supported("-std=c++14"); + if is_android { - builder.cpp_link_stdlib("c++_static"); // Use shared C++ runtime for Android compatibility + builder.cpp_link_stdlib("c++_static") + .flag("-static-libstdc++") + .flag("-fexceptions") + .flag("-funwind-tables"); // Use shared C++ runtime for Android compatibility } builder.compile("taglib_cxx_bindings");