【问题标题】:How can I expose a callback from my Bazel cc_library so it can be called from libSDL2 in my Android project?如何从我的 Bazel cc_library 公开回调,以便可以从我的 Android 项目中的 libSDL2 调用它?
【发布时间】:2018-07-19 15:07:50
【问题描述】:

SDL2 Android 项目包含一个 Android Activity 类 (SDLActivity),它使用对 nativeRunMain() 的 JNI 调用将 C 库的名称和其中的回调传递给 SDL_android.c。然后使用 dlopendlsym 动态调用 C 回调。

但是,在运行 adb logcat 时,nativeRunMain() 会说它是 Couldn't find function main in library lib<android-binary>.so

我的 cc_library 定义如下所示:

cc_library(
  name = "main",
  srcs = ["jni/main.c"],
  deps = [
    "@libSDL2//:lib"
  ]
)

main.c

#include <stdio.h>

#include "SDL.h"

int main(int argc, char* argv[]) {
    ...
}

此处可重现的示例代码: https://files.fm/u/hr62nbr3

【问题讨论】:

  • 您有可重现的示例项目吗?查看完整的 BUILD 和源文件以及项目结构会很有帮助。

标签: android sdl-2 bazel


【解决方案1】:

main 未作为符号导出,因为它是保留的函数名称,将名称更改为其他名称可以解决此问题。

使用nm -D 检查.so 文件的动态符号表,我可以看到main 没有作为符号导出。将函数 main 的名称更改为其他名称意味着它将可用。

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多