首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我如何公开我的Bazel cc_library的回调,以便可以在我的安卓项目中从libSDL2调用它?

我如何公开我的Bazel cc_library的回调,以便可以在我的安卓项目中从libSDL2调用它?
EN

Stack Overflow用户
提问于 2018-07-19 23:07:50
回答 1查看 109关注 0票数 2

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

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

我的cc_library定义如下所示:

代码语言:javascript
复制
cc_library(
  name = "main",
  srcs = ["jni/main.c"],
  deps = [
    "@libSDL2//:lib"
  ]
)

main.c

代码语言:javascript
复制
#include <stdio.h>

#include "SDL.h"

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 03:42:04

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51426104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档