gpt4 book ai didi

android - 跨原生 GCC 4.8 构建 : libcpp Error: invalid conversion from long long to off_t (aka long int)

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:10 25 4
gpt4 key购买 nike

因为我喜欢折磨自己,在我将GCC 4.7移植到Android后,我决定立即尝试将GCC 4.8移植到Android。

我在构建的 libcpp 部分遇到了以下错误:

../../gcc-4.8/libcpp/files.c:725:27: error: cannot convert 'long long int*' to 'off_t* {aka long int*}' for argument '7' to 'unsigned char* _cpp_convert_input(cpp_reader*, const char*, unsigned char*, size_t, size_t, const unsigned char**, off_t*)'

我的问题是:这种转换是否可行?

编辑:我最初发布了一个答案,即需要编写一个类型转换而不是依赖隐式转换,但鉴于我在这样做之后遇到的问题,我删除了它。

这是原始有问题的代码:

  file->buffer = _cpp_convert_input (pfile,
CPP_OPTION (pfile, input_charset),
buf, size + 16, total,
&file->buffer_start,
&file->st.st_size);

这是我尝试过的转换(注意:我对 C 语言只有基本的了解):

off_t ot = (off_t) file->st.st_size

在目标设备上运行时,使用上述转换会导致 cc1 二进制文件出现“错误地址”错误。

最佳答案

再一次,在我提出问题 24 小时后,答案出现了。

注:以下内容来自24小时的C语言解析...如有不妥欢迎大家批评指正。

“缩小”转换与“隐式”转换相同,这在 Android 原生开发中显然是不允许的,或者对于 Bionic libc 是不可能的...我不确定是哪个。因此,为了使 files.c 中的函数起作用,需要将传递给 _cpp_convert_input 的 long long int 转换为 off_t。

我将强制转换添加到 files.c 作为解决方法;如果构建有效,我会用它更新这个答案。

编辑:不幸的是,我添加的 Actor 没有工作...构建完成但生成的二进制文件在设备上运行时抛出“错误地址”。我会将修改发布到另一个问题。

编辑:类型转换有效……我只是没写对。感谢并感谢 Jonathan Wakely 纠正了这个问题:

off_t ot = (off_t) file->st.st_size
funct(*args*, &ot)

进入这个:

off_t ot = (off_t) file->st.st_size;
funct(*args*, &ot);
file->st.st_size = ot;

这加上另一个添加到 macro.c 的显式转换以及对 gengtype.c、gcc/Makefile.in 和 double-int.h 的编辑允许构建完成并且二进制文件可以在设备上运行。

关于android - 跨原生 GCC 4.8 构建 : libcpp Error: invalid conversion from long long to off_t (aka long int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600459/

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