gpt4 book ai didi

android - 是否可以从使用 Android NDK 构建的共享库中删除符号?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:51:15 24 4
gpt4 key购买 nike

我正在构建一个共享库,以便在使用 Android NDK 的 Java 应用程序中使用。使用 readelf 检查发布版本生成的 lib/armeabi-v7a/libXXXlib.so 文件,它似乎包含我的所有符号(函数、变量名) native C/C++ 代码。

事实上,调试和发布版本的共享目标文件似乎是相同的。 (libs 文件夹中输出的唯一区别是是否创建了 gsb.setupgdbserver 文件。)我是在我的 Application.mk 中使用 APP_CFLAGS += -O3 覆盖 NDK 设置的优化,但我不希望发布版本通过包含-g 标志,它确实如此。

我发现关于 SO 的评论 'In both cases, debug and release, it leaves the -g flag in because, to quote the comment, "we generate symbol versions of the binaries that are later stripped when they are copied to the final project's libs/ directory"' , 另一个说明: 'JNI cannot find the functions for java if they don't have names.'

ndk-build 肯定会从 obj/armeabi-v7a/libXXXlib.so 文件中剥离东西,因为它比最终在 libs 中创建的那个,但它似乎仍然在文件中完整地保留了我所有的函数和变量的名称。

JNI 是否需要所有我的函数名称(而不仅仅是 native 代码的入口点)?

如果没有,如何删除不需要的符号?

最佳答案

随意设置默认 visibility=hidden,并为您需要在 Windows 中导出的几个函数(类似于 DLLEXPORT)设置属性 visibility=default

关于android - 是否可以从使用 Android NDK 构建的共享库中删除符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17022983/

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