Я обнаружил, что если я скомпилирую вместе с другим файлом cpp, использующим <iostream>
, проблема множественного определения __ udivdi3 исчезнет.
Минимальный файл cpp похож на следующий
#include <iostream> void f(){ std::cout << ""; }
Полагаю, использование iostream приводит к тому, что libgcc.a
не связан, поэтому определение не конфликтует. Это может быть временное решение, но я все еще ищу решение.
Дамп результата
i686-linux-android-readelf --symbols libgcc.a
i686-linux-android-readelf --symbols libippcore_l.a
Файл:. \ Libgcc.a (_udivdi3.o)
Symbol table '.symtab' contains 16 entries:
Num: Value Size Type Bind Vis Ndx Name
...
...
12: 00000000 0 SECTION LOCAL DEFAULT 15
13: 00000000 0 SECTION LOCAL DEFAULT 16
14: 00000000 0 SECTION LOCAL DEFAULT 14
15: 00000000 257 FUNC GLOBAL DEFAULT 1 __udivdi3
Файл:. \ Libippcore_l.a (divdi3.o)
Symbol table '.symtab' contains 45 entries:
Num: Value Size Type Bind Vis Ndx Name
...
...
39: 000002a6 0 NOTYPE LOCAL DEFAULT 1 Lneed_decgas_3
40: 00000273 0 NOTYPE LOCAL DEFAULT 1 Lafter_decgas_3
41: 00000297 0 NOTYPE LOCAL DEFAULT 1 Lch_signgas_3
42: 00000000 224 FUNC GLOBAL DEFAULT 1 __divdi3
43: 000000e0 162 FUNC GLOBAL DEFAULT 1 __udivdi3
44: 00000182 297 FUNC GLOBAL DEFAULT 1 __moddi3