登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 - [函数库] >> 主题: [xcode/c++]一个 xcode 下的经典错误及解决     [回主站]     [分站链接]
标题
[xcode/c++]一个 xcode 下的经典错误及解决
clq
浏览(4) + 2021-06-28 22:24:24 发表 编辑

关键字:

[xcode/c++]一个 xcode 下的经典错误及解决

表现为在 xcode 12 可正常编译,在 xcode 12.5 下报错。大致是在系统 c++ 库的 ctime.h 里报没有 ::mktime 这些函数。
一开始以为是通常的没有库加入到项目中:因为这很容易解释,某些库在高版本 xcode 中没有了嘛!
这对于时常更新的 xcode 来说是很常见的问题,因为它经常更换某个功能的实现库等等。
仔细检查以发现是在某个 pch 文件中报的错,而搜索后知道 pch 类似于 vc 的 afx... 那个常见的头文件,就是把一堆东西先编译好。
所以想那就可能是上个版本的编译器编译好的东西没有清除缓存。
结果 pch 会不会产生缓存没搞清楚,反而发现了项目中的 pch 实际上会被 xcode 当成一个公用的 .h 文件强加给所有要编译的文件!而不管你是不是 include 了它!

最后的结果可以说和 pch 有关系,又可以说和它没关系。只是因为每个文件都个包含它,增强了修复这个错误的难度。实际上也和库没关系,就是没有正确 include 到包含了
mktime 的函数而已。而引起的原因是,项目中使用了 ffmpeg ,而 ffmpeg 中包含有 time.h 于是和系统的 time.h 冲突了。

网上有很多解决这种冲突的文章,不过大多是利用 xcode 的特性去修改某个参数,好让文件优先搜索系统的 time.h 。有时候这种方法是能成功的,不过这种魔法似的东西最好还是避免。
还是将 ffmpeg 的 time.h 修改成另外一个名称,例如 time_ff.h 为好。项目中引用到它的地方不会太多的,所以实际上很容易修改。

至于 xcode12 下为什么不会报错呢?只能说作为一个编译器,xcode 的修改太频繁了,说是 bug 也好,说是特性也好,我想我们别管那么多,按最保守的处理方式来解决吧。





总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1