繁体   English   中英

禁用 JNI C 代码中变量的编译器优化

[英]Disable compiler optimization for a variable in JNI C code

我在 Android JNI C 函数中有一个变量定义,它只将自身定义为字符串。 我希望这个字符串出现在二进制文件中,但是当我构建项目时,.so 文件不包含该字符串。

这是我在 C 代码中尝试过的。

#pragma GCC push_options
#pragma GCC optimize ("O0")
const char volatile myString[32] = "Some string that must be there";
#pragma GCC pop_options

如何禁用编译器优化掉这个未使用的变量定义?

我怀疑您的问题不在于编译,而在于链接。 链接器通常会遗漏未使用的数据,以减少二进制文件的大小。 要检查这一点,请在从 C 文件生成的.o文件上使用strings命令或等效命令:如果字符串在其中,但不在.so中,则问题出在链接上。

不幸的是,我不知道如何使用链接器命令解决这个问题,因为我所有的 Android C 编程都是使用独立的工具链和自定义构建系统完成的。

您最简单的解决方案就是在运行时复制字符串。 您需要在 C 代码中执行此操作,以便链接器知道该字符串已被使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM