golang开发Android native程序 。遇到各种问题。

thro3388 · 2023-03-09 15:46:04 · 3663 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-03-09 15:46:04 的主题,其中的信息可能已经有所发展或是发生改变。

光写一个android linux的native程序 简单 设置平台android 然后cpu ARM64就可以了。但是有个问题 。。我想和我的C语言组合起来完成某些事情 。然后考虑用C语言编译成.a这种静态的库给cgo用。cgo用的时候报错。报一个 ld error 这种 然后 libnumber.a(number.o): not an ELF file 这种提示(文件名我用的网上一个帖子的命名)。为什么连接.a 文件会报不是个ELF文件的错误呢 。。后来想算了。用动态的吧。。然后动态的编译过了 。。拿到Android去跑的时候 。 library "libxxxxxx.so" not found: needed by main executable 有一直报这个错误 。程序加载不进这个so。我自己写个程序dlopen去加载都好好的 。。哎。有没有朋友遇到过这个问题的呢 。望告知。感谢。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3663 次点击  
加入收藏 微博
6 回复  |  直到 2023-03-20 12:51:02
lysShub
lysShub · #1 · 2年之前

gradle 打包成apk的时候,不是一个简单的压缩包;它会根据一些配置文件把指定的资源放在指定的路径。所以你必须在一些配置文件中增加相应的规则。

这个问题可以简单地验证,直接把apk解压,里面是没有你的那个go编译的so文件的。

thro3388
thro3388 · #2 · 2年之前
lysShublysShub #1 回复

gradle 打包成apk的时候,不是一个简单的压缩包;它会根据一些配置文件把指定的资源放在指定的路径。所以你必须在一些配置文件中增加相应的规则。 这个问题可以简单地验证,直接把apk解压,里面是没有你的那个go编译的so文件的。

我go语言直接编译成linux下的可执行文件。就一个文件 。然后丢到收i就里面 。chmod 777 xxx 。ELF格式的 。直接可以执行 。只是在导出函数的时候。感觉导出的函数有点不对。。可以在别的so里面调用dlopen和dlsym可以得到函数地址 。但是这个地址里面的内容不是汇编代码 所以我调用这个地址死了

lysShub
lysShub · #3 · 2年之前

go编动态库,函数大写加export标识,build mode是c-share。可以用工具查看elf文件,是否正确暴露了

lysShub
lysShub · #4 · 2年之前

额。。。你的问题不是so文件直接找不到吗

freboat
freboat · #5 · 2年之前

你的c代码怎么编译的? 首先是要跨平台的gcc编译器, 类似gcc-arm64-linux-.. 这样的

thro3388
thro3388 · #6 · 2年之前
lysShublysShub #4 回复

额。。。你的问题不是so文件直接找不到吗

C语言.a 给go用 。。go已经可以编译了。也搞不懂怎么回事

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传