使用g++编译ftpupload.c出现void*转FILE*错误如何解决?
问题根因
你使用C编译器g++编译原生C代码触发了类型校验规则差异:C语言允许void*类型指针隐式转换为其他类型指针,但C不允许该隐式转换,因此在fread调用传入void*类型的stream参数时报错。
解决方法
- 方案1(优先推荐):使用C语言编译器编译代码
该源码本身是C语言实现,直接用gcc编译即可,编译命令如下:
注意需添加gcc -o program ftpupload.c -lcurl-lcurl参数链接curl依赖库,避免后续链接阶段报错。 - 方案2:修改源码适配C++编译规则
找到报错对应的第57行,对stream参数添加显式类型转换:
修改后再用// 原代码 size_t retcode = fread(ptr, size, nmemb, stream); // 修改为 size_t retcode = fread(ptr, size, nmemb, (FILE*)stream);g++编译即可通过。 - 方案3(不推荐,仅临时调试使用):添加编译参数放宽C类型检查
编译时添加-fpermissive参数,允许C编译器接受不符合规范的隐式类型转换:
该方案会关闭部分类型校验,可能掩盖其他代码问题,不建议正式场景使用。g++ -o program ftpupload.c -lcurl -fpermissive
内容的提问来源于stack exchange,提问作者JDop
相关产品推荐
相关产品推荐

