gpt4 book ai didi

android - 如何从我的 Bazel cc_library 公开回调,以便可以从我的 Android 项目中的 libSDL2 调用它?

转载 作者:行者123 更新时间:2023-11-29 01:00:41 26 4
gpt4 key购买 nike

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

但是,当运行 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"
]
)

主.c

#include <stdio.h>

#include "SDL.h"

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

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

最佳答案

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

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

关于android - 如何从我的 Bazel cc_library 公开回调,以便可以从我的 Android 项目中的 libSDL2 调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51426104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com