WebRTC:与WebRTC库链接的Android项目中对"__real_malloc"的未定义引用



我的项目是一个基于NDK的Android共享库,链接到Chromium的WebRTC共享库。当链接我的项目的本地代码组件时,我看到一些"未定义引用"错误,但它们是针对应该由链接器本身生成的符号:

__real_malloc, et. al.
__executable_start

未定义的引用源于WebRTC对象文件:

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开发的新手,可能做了一些基本的错误。

谢谢!

其他背景信息,以防有帮助。

WebRTC构建环境:

  • Ubuntu 18.04
  • 工具链:NDK r13/clang/llvm(通过Depot Tools安装(
  • Android的交叉编译

我自己的项目构建环境:

  • Windows 10
  • 工具链:NDK r19/clang/llvm
  • Android的交叉编译

我使用安卓工作室生成的Gradle+CMake配置构建我的项目。首先,我必须使用他们基于忍者的构建系统(称为Depot Tools(来构建Chromium的WebRTC库。一旦成功,我将使用bash脚本为WebRTC组件创建一个静态库:

# 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

现在我有了一个带有WebRTC符号的静态库,我可以链接到我的项目中(我的项目本身就是一个共享库(。顺便说一句,我想知道是否有一种"官方"的方式来构建这个静态的WebRTC库。我找不到任何关于它的消息。

接下来,我使用NDK的externalNativeBuild编译并链接我的项目,以调用我的CMakeLists.txt脚本。它编译所有内容时没有任何警告,但链接器找不到上面提到的符号。

我解决了自己的问题。供将来参考:Chromium WebRTC构建实际上创建了自己的libwebrtc.一个静态库。我不需要自己做。当我引用libwebrtc.a.的"官方"版本时,所有链接都成功了

最新更新