gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:24:10 25 4
gpt4 key购买 nike

我在 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 命令或等效命令:如果该字符串位于该文件中,但不在您的 中。所以你的问题是链接。

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

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

关于android - 禁用 JNI C 代码中变量的编译器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53698813/

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