2013-10-25 90 views
2

因为我喜欢折磨自己,在将GCC 4.7移植到Android之后,我决定立即尝试将GCC 4.8移植到Android。Cross-Native GCC 4.8 Build:libcpp错误:long long无效转换为off_t(又名long int)

我构建的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); 

这里是我试过投(注:我只有℃的基本理解):

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

使用上述结果投中一“在目标设备上运行时,来自cc1二进制文件的错误地址“错误。

+0

C中的对象指针类型之间没有隐式转换(除了'void *')。 – ouah

+0

编辑:等待...根据口袋C(我发布后发布),隐式转换是可能的标量和指针类型之间。对象指针和指针类型有区别吗? – MonaLisaOverdrive

回答

1

在我问这个问题24小时后,答案出现了。

注意:下面是从24小时的C语言解析...如果有任何不正确的,请随时发表评论。

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

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

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

编辑:演员阵容......我只是没有写得对。感谢和荣誉乔纳森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允许构建完成并且二进制文件在设备上运行。