包含 ACRCloud Native Lib 时我自己的 Native Lib 崩溃

When Including ACRCloud Native Lib My Own Native Lib Crashes

我有一个使用 NDK 的 Android 应用程序。在我的 C++ 代码中,我调用了 std::use_facet()。我的应用程序本身运行良好,但是当我添加 ACRCloud SDK 时,我在启动我的应用程序时立即崩溃:

Build fingerprint: 'google/taimen/taimen:9/PPR2.180905.005/4928864:user/release-keys'
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG: Revision: 'rev_10'
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG: ABI: 'arm'
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG: pid: 2915, tid: 2915, name: .app  >>> com.mycompany.android.app <<<
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG: Cause: null pointer dereference
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG:     r0  00000000  r1  00000043  r2  d5b21700  r3  00000000
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG:     r4  ffd1a974  r5  ebd856ac  r6  ebd856ac  r7  d551c3a4
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG:     r8  d3acfae8  r9  f45842c0  r10 00000143  r11 ffd1a9b4
2018-10-17 14:48:36.357 2938-2938/? A/DEBUG:     ip  00000000  sp  ffd1a948  lr  d473ae40  pc  d473ae54
2018-10-17 14:48:36.550 2938-2938/? A/DEBUG: backtrace:
2018-10-17 14:48:36.550 2938-2938/? A/DEBUG:     #00 pc 03e2fe54  /data/app/com.mycompany.android.app-APqEWGjyWJxWwxYs8NNiHA==/lib/arm/libMyApp.so (std::ctype<char> const& std::use_facet<std::ctype<char>>(std::locale const&)+40)
2018-10-17 14:48:36.550 2938-2938/? A/DEBUG:     #01 pc 023ee45c  /data/app/com.mycompany.android.app-APqEWGjyWJxWwxYs8NNiHA==/lib/arm/libMyApp.so (_ZNSt8__detail9_CompilerISt12regex_traitsIcEEC1EPKcS5_RKS2_NSt15regex_constants18syntax_option_typeE+232)
2018-10-17 14:48:36.550 2938-2938/? A/DEBUG:     #02 pc 023eb19c  /data/app/com.mycompany.android.app-APqEWGjyWJxWwxYs8NNiHA==/lib/arm/libMyApp.so (_ZNSt8__detail13__compile_nfaISt12regex_traitsIcEEESt10shared_ptrINS_4_NFAIT_EEEPKNS5_9char_typeESA_RKS5_NSt15regex_constants18syntax_option_typeE+80)
2018-10-17 14:48:36.550 2938-2938/? A/DEBUG:     #03 pc 023e8d28  /data/app/com.mycompany.android.app-APqEWGjyWJxWwxYs8NNiHA==/lib/arm/libMyApp.so (_ZNSt11basic_regexIcSt12regex_traitsIcEEC2IPKcEET_S6_NSt15regex_constants18syntax_option_typeE+240)

崩溃出现在我的本机库中,但我认为这是与其中的 ACRCloud 库有关导致的。

请注意,在崩溃时没有代码 运行 可实例化任何 ACRCloud SDK。

我的直觉是 ACRCloud 也在某处使用相同的方法调用,std::use_facet(),并且在编译过程中引入了来自 ACRCloud 的符号而不是我的符号,这在某种程度上导致了冲突。

也许 ACRCloud 的人可以插话。

这次崩溃是由“/lib/arm/libMyApp.so”引起的。它可能是您自己的图书馆。 ACRCloud SDK 不包含此库。

原来我的构建设置不正确。我正在使用 Bazel 构建所有内容,并且我使用 cc_library 规则引用 ACRCloud 库,而不是它应该使用的规则:文件组。

我认为当我使用 cc_library 规则时,在编译期间修改了一些东西,这导致了我的错误;然而,如果我通过文件组导入它,工件将被引入而不会以任何方式被触及。