Skip to content

Multiple definition of '__aeabi_uidivmod' and '__aeabi_uldivmod' on arm-linux-androideabi #412

Closed
@petrochenkov

Description

@petrochenkov

In rust-lang/rust#83822 I attempted to remove the --allow-multiple-definition linker hack from Android target specs in rustc, but observed the next linking error:

error: linking with `/android/ndk/arm-14/bin/arm-linux-androideabi-clang` failed: exit status: 1
  |
  = note: "/android/ndk/arm-14/bin/arm-linux-androideabi-clang" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-Wl,--as-needed" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/arm-linux-androideabi/lib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/arm-linux-androideabi/release/deps/std-aa02b9ba56c47188.std.1gj5x857-cgu.0.rcgu.o" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/arm-linux-androideabi/release/deps/libstd-aa02b9ba56c47188.so" "-Wl,--version-script=/tmp/rustcsKqBUX/list" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/arm-linux-androideabi/release/deps/std-aa02b9ba56c47188.550hwdqflrivilit.rcgu.o" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/arm-linux-androideabi/release/deps/std-aa02b9ba56c47188.f3uuzluee2cbevv.rcgu.o" "-shared" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/arm-linux-androideabi/release/deps" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/release/deps" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/arm-linux-androideabi/release/build/compiler_builtins-0cc9b3ede123fcbb/out" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/arm-linux-androideabi/release/build/profiler_builtins-f00fa99f86511a66/out" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/arm-linux-androideabi/lib" "-ldl" "-llog" "-lgcc" "-Wl,-Bstatic" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libpanic_unwind-53a82f532deef78c.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libminiz_oxide-5ae569e4d71b98f2.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libadler-480e8a29cd327522.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libobject-818d6dece30befc6.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libaddr2line-83e55526cd23350a.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libgimli-d880f99d5b85d10a.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/librustc_demangle-cd2642fb698e70d6.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libhashbrown-a9c6975bf97337e1.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/librustc_std_workspace_alloc-12a29a9bfdad4d51.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libunwind-7de75771c758f0b5.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libcfg_if-7dbf72bdfaf506c0.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/liblibc-f48e19d6fccfbd3c.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/liballoc-cddf24203f98dfca.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/librustc_std_workspace_core-751cff066ed2ddff.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustcsKqBUX/libcore-61aecf05f20b0be0.rlib" "-Wl,--no-whole-archive" "/tmp/rustcsKqBUX/libcompiler_builtins-fa77a8df7f01d459.rlib" "-Wl,-Bdynamic" "-lc" "-lm" "-Wl,-rpath,$ORIGIN/../lib"
  = note: /android/ndk/arm-14/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /tmp/rustcsKqBUX/libcompiler_builtins-fa77a8df7f01d459.rlib(compiler_builtins-fa77a8df7f01d459.compiler_builtins.1pwrvrkl-cgu.55.rcgu.o): multiple definition of '__aeabi_uidivmod'
          /android/ndk/arm-14/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: /android/ndk/arm-14/bin/../lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/libgcc.a(_udivsi3.o): previous definition here
          /android/ndk/arm-14/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: /tmp/rustcsKqBUX/libcompiler_builtins-fa77a8df7f01d459.rlib(compiler_builtins-fa77a8df7f01d459.compiler_builtins.1pwrvrkl-cgu.55.rcgu.o): multiple definition of '__aeabi_uldivmod'
          /android/ndk/arm-14/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: /android/ndk/arm-14/bin/../lib/gcc/arm-linux-androideabi/4.9.x/armv7-a/libgcc.a(_aeabi_uldivmod.o): previous definition here
          clang50: error: linker command failed with exit code 1 (use -v to see invocation)

Previously compiler-builtins fixed similar errors on other targets by putting symbols to separate object files or changing linking order.

It would be great to fix this case as well, and remove --allow-multiple-definition from Android target specs.
That option is a really heavy hammer used when everything is on fire but you still need to make things work, and it is able to hide legitimate errors.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions