因为喜欢折磨自己,所以在将 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 二进制文件出现“错误地址”错误。