跨本机GCC 4.8构建:libcpp错误:从long long到off_t(又名long int)的无效转换

蒙娜丽莎

因为我喜欢折磨自己,所以在将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中作为解决方法;如果构建成功,我将使用它更新此答案。

编辑:不幸的是,我添加的强制转换无法正常工作...构建已完成,但是在设备上运行时,生成的二进制文件却抛出了“错误的地址”。我将修改发布到另一个问题。

编辑:强制转换工作...我只是写不正确。感谢乔纳森·韦克利(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的编辑,使构建完成并且二进制文件可以在设备上运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误:从'const int *'到'int *'的无效转换

来自分类Dev

错误:从'DWORD {aka long unsigned int *}到'PDWORD {aka long unsigned int *}'的无效转换[-fpermissive] | 怎么修?

来自分类Dev

g ++编译器:从'pthread_t {aka long unsigned int}'到'void *(*)(void *)'的错误无效转换[-fpermissive]

来自分类Dev

错误:从'int'到enum C ++的无效转换

来自分类Dev

为什么会出现“从“无效*”到“ int **”的无效转换错误?

来自分类Dev

从int到long int的类型转换

来自分类Dev

错误:将“long int (*)[4]”赋值给“long int [4][4]”时的类型不兼容

来自分类Dev

错误:在编译`gcc`时,将'-1'的转换范围从'int'缩小为'long unsigned int'[-Wnarrowing]

来自分类Dev

错误:从'int(*)(void *)'到'void *(*)(void *)'的无效转换

来自分类Dev

“从'FILE * {aka _iobuf}'到'int'的无效转换”错误

来自分类Dev

错误:从'void *'到'int(*)(const void *,const void *)'的无效转换

来自分类Dev

从int *到int的无效转换

来自分类Dev

“错误:从 'int' 到 'int (*)[8]' [-fpermissive] 的无效转换”是什么意思?

来自分类Dev

在Arduino错误上将4个字节转换为long

来自分类Dev

AFURLConnectionOperation.m隐式转换失去整数精度:从'int64_t'(aka'long long')到'NSInteger'(aka'int')

来自分类Dev

从int到long分配

来自分类Dev

只读位置'*(a +((sizetype)((((long long unsigned int)min)* 4ull)))'的C ++ [错误]分配

来自分类Dev

编译器错误:从int *到unsigned int *的无效转换[-fpermissive]

来自分类Dev

qsort给出[错误]:从'int(*)(cricketer *,cricketer *)'到'int(*)(const void *,const void *)'的无效转换

来自分类Dev

从unsigned long long转换为unsigned int

来自分类Dev

奇怪的IF语句错误“从字符串“ FAIL”到类型'Long'的转换无效。“

来自分类Dev

C-“从“ int *”到“ int”的无效转换

来自分类Dev

从'const int *'到'int *'的无效转换

来自分类Dev

使用函数从int *到int的无效转换

来自分类Dev

C ++从int *到int的无效转换

来自分类Dev

C - 从 int* 到 int 的无效转换

来自分类Dev

从long到int可能的有损转换

来自分类Dev

从long到int可能的有损转换,JAVA

来自分类Dev

为什么无法从int到Long隐式转换?

Related 相关文章

  1. 1

    错误:从'const int *'到'int *'的无效转换

  2. 2

    错误:从'DWORD {aka long unsigned int *}到'PDWORD {aka long unsigned int *}'的无效转换[-fpermissive] | 怎么修?

  3. 3

    g ++编译器:从'pthread_t {aka long unsigned int}'到'void *(*)(void *)'的错误无效转换[-fpermissive]

  4. 4

    错误:从'int'到enum C ++的无效转换

  5. 5

    为什么会出现“从“无效*”到“ int **”的无效转换错误?

  6. 6

    从int到long int的类型转换

  7. 7

    错误:将“long int (*)[4]”赋值给“long int [4][4]”时的类型不兼容

  8. 8

    错误:在编译`gcc`时,将'-1'的转换范围从'int'缩小为'long unsigned int'[-Wnarrowing]

  9. 9

    错误:从'int(*)(void *)'到'void *(*)(void *)'的无效转换

  10. 10

    “从'FILE * {aka _iobuf}'到'int'的无效转换”错误

  11. 11

    错误:从'void *'到'int(*)(const void *,const void *)'的无效转换

  12. 12

    从int *到int的无效转换

  13. 13

    “错误:从 'int' 到 'int (*)[8]' [-fpermissive] 的无效转换”是什么意思?

  14. 14

    在Arduino错误上将4个字节转换为long

  15. 15

    AFURLConnectionOperation.m隐式转换失去整数精度:从'int64_t'(aka'long long')到'NSInteger'(aka'int')

  16. 16

    从int到long分配

  17. 17

    只读位置'*(a +((sizetype)((((long long unsigned int)min)* 4ull)))'的C ++ [错误]分配

  18. 18

    编译器错误:从int *到unsigned int *的无效转换[-fpermissive]

  19. 19

    qsort给出[错误]:从'int(*)(cricketer *,cricketer *)'到'int(*)(const void *,const void *)'的无效转换

  20. 20

    从unsigned long long转换为unsigned int

  21. 21

    奇怪的IF语句错误“从字符串“ FAIL”到类型'Long'的转换无效。“

  22. 22

    C-“从“ int *”到“ int”的无效转换

  23. 23

    从'const int *'到'int *'的无效转换

  24. 24

    使用函数从int *到int的无效转换

  25. 25

    C ++从int *到int的无效转换

  26. 26

    C - 从 int* 到 int 的无效转换

  27. 27

    从long到int可能的有损转换

  28. 28

    从long到int可能的有损转换,JAVA

  29. 29

    为什么无法从int到Long隐式转换?

热门标签

归档