[英]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.