Android JNI 打印 int64_t 到文件

Posted

技术标签:

【中文标题】Android JNI 打印 int64_t 到文件【英文标题】:Android JNI print int64_t to file 【发布时间】:2016-01-10 14:16:23 【问题描述】:

我正在尝试使用 JNI 代码将 android 传感器时间戳打印到文件中。

时间戳为defined asint64_t

打印时间戳的行是:

fout<<timestamp<<std::endl;

其中 fout 是在输出模式下打开的文件流。

当我尝试编译时,出现以下错误结果:

'operator' 和 'int64_t aka long long int')XXX.cpp /YYY/jni 行 ZZZ C /C++ 问题

我想我会使用标准 C++ 制作一个 MWE:

#include <iostream>
#include <cstdint>

int main()
  int64_t a;
  std::cin>>a;
  std::cout<<a<<std::endl;

但这编译没有问题,这让我觉得问题出在 Eclipse 编译代码的方式上。

我在 Eclipse 3.8.1 中。我的默认编译器是 GCC 4.9.2。

【问题讨论】:

编译器知道a=42。尝试在那里存储时间戳。 或者尝试把这个整数存在那里 @18446744073709551615:我已经修改了代码,使其接受用户输入,从而阻止编译器对常量进行优化。 【参考方案1】:

我通过进入jni/Application.mk 并使用这一行解决了这个问题:

LOCAL_CPPFLAGS += -std=gnu++11

代替这一行:

LOCAL_CPPFLAGS+=-std=c++11.

有人猜测是由于long long int在stlport中的映射不同造成的。

【讨论】:

以上是关于Android JNI 打印 int64_t 到文件的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在Android NDK上使用__int128_t?

[Android-NDK编译] ndk 编译 c++ 兼容性问题汇总整理

ndk 编译 c++ 兼容性问题汇总整理

如何用 D 语言正确打印 uint64_t (dtrace)

动态整数大小:int64_t、int32_t、uint32_t 等

使用非固定整数(int、long)而不是固定大小的整数(int64_t、int32_t)有啥好处吗?