Множественное определение «__udivdi3» при связывании ippcore в проекте ndk - PullRequest
0 голосов
/ 30 августа 2018

Когда я скомпилировал свой проект ndk и связал его со статической библиотекой ipp libippcore_l.a , компоновщик жалуется, что встретил ошибку множественных определений для этого символа __ udivdi3 . Кажется, это функция деления, определенная как в библиотеке gcc, так и в библиотеке ippcore.

Как мне избавиться от этой ошибки ссылки? Удаление ippcore маловероятно.

..../Android/Sdk/ndk-bundle_r15c/build//../toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: error: 
 ..../_lib/Android/x86/libippcore_l.a(divdi3.o): multiple definition of '__udivdi3'

..../Android/Sdk/ndk-bundle_r15c/build//../toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld:
..../Android/Sdk/ndk-bundle_r15c/build//../toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/libgcc.a(_udivdi3.o): previous definition here

clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)

Настройка компиляции

  • NDK: r15c
  • TOOLCHAIN: лязг
  • APP_ABI: x86
  • APP_STL: c ++ _ static
  • ФЛАГИ: -frtti -fexceptions -O2 -finline-функции -Wno-сужение --std = c ++ 11

1 Ответ

0 голосов
/ 30 августа 2018

Я обнаружил, что если я скомпилирую вместе с другим файлом 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...