WebRT C: неопределенная ссылка на "__real_mallo c" в Android проекте, связанном с библиотекой WebRT C - PullRequest
0 голосов
/ 19 февраля 2020

Мой проект представляет собой общую библиотеку Android на основе NDK, которая связывается с общей библиотекой Chromium WebRT C. При связывании компонента собственного кода моего проекта я вижу некоторые ошибки «неопределенной ссылки», но они относятся к символам, которые должны генерироваться самим компоновщиком:

    __real_malloc, et. al.
    __executable_start

Неопределенные ссылки происходят из объекта WebRT C файлы:

base/allocator/allocator_shim_default_dispatch_to_linker_wrapped_symbols.cc:39: undefined reference to `__real_malloc'
base/trace_event/trace_log.cc:1615: undefined reference to `__executable_start'

Мой вопрос: Почему эти символы не определены? Как я могу это исправить? Это единственные сообщения об ошибках. Других ошибок и предупреждений нет.

Я с нетерпением жду каких-либо идей от сообщества. Я застрял на этом в течение длительного времени! Я новичок в Android разработке и, вероятно, делаю что-то неправильное.

Спасибо!

Дополнительная справочная информация, если она полезна.

WebRT C среда сборки:

  • Ubuntu 18.04
  • Набор инструментов: NDK r13 / clang / llvm (устанавливается с помощью инструментов депо)
  • Кросс-компиляция для Android

Моя собственная среда сборки проекта:

  • Windows 10
  • Набор инструментов: NDK r19 / clang / llvm
  • Кросс-компиляция для Android

Я строю свой проект с использованием конфигурации Gradle + CMake, созданной Android Studio. Сначала я должен собрать библиотеку Chromium WebRT C, используя их систему сборки на основе Ninja (называемую Depot Tools). После этого я создаю библиотеку stati c для компонента WebRT C, используя скрипт bash:

    # Get the names of all the object files.
    find ./obj -name *.o >libwebrtc.list
    # Generate the static library.
    cat libwebrtc.list | xargs ar -crs libwebrtc.a
    # Add an index to the static library.
    ranlib libwebrtc.a

Теперь у меня есть библиотека stati c с символами WebRT C Я могу добавить ссылку на свой проект (мой проект сам является общей библиотекой). Кроме того, мне интересно, существует ли "официальный" способ создания этой библиотеки stati c WebRT C. Я не смог найти никакого упоминания об этом.

Затем я компилирую и связываю свой проект, используя externalNativeBuild NDK, чтобы вызвать мой сценарий CMakeLists.txt. Он компилирует все без предупреждений, но компоновщик не может найти символы, упомянутые выше.

1 Ответ

0 голосов
/ 19 февраля 2020

Я решил свою проблему. Для дальнейшего использования: сборка Chromium WebRT C фактически создает свою собственную библиотеку libwebrt c .a stati c. Мне не нужно было делать это самому. Все ссылки успешно, когда я ссылаюсь на "официальную" версию libwebrt c .a.

...