Мой проект представляет собой общую библиотеку 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. Он компилирует все без предупреждений, но компоновщик не может найти символы, упомянутые выше.