5

我正在将一个已知可以工作的大型旧系统移植到 Ubuntu 64 位 Linux 上。系统使用FLTK,升级到1.3.2,我用的是NetBeans。文件包括基本通用 /FL/Fl.H 作为其第一行。这包括较新的 unicode 启用程序 /FL/fl_utf8.h。这包括系统文件<sys/stat.h>,然后包括系统文件<bits/stat.h>。当把它连接起来,并且 -I 包括各种不同的目录时,突然系统文件在编译时中断:

In file included from /usr/include/sys/stat.h:107,
/usr/include/bits/stat.h:88: error: field ‘st_atim’ has incomplete type
/usr/include/bits/stat.h:89: error: field ‘st_mtim’ has incomplete type
/usr/include/bits/stat.h:90: error: field ‘st_ctim’ has incomplete type
/usr/include/bits/stat.h:149: error: field ‘st_atim’ has incomplete type
/usr/include/bits/stat.h:150: error: field ‘st_mtim’ has incomplete type
/usr/include/bits/stat.h:151: error: field ‘st_ctim’ has incomplete type

最新的 FLTK 不工作了吗?对 64 位过敏?互联网提示系统头文件中的错误?glibc 不兼容?添加_GNU_SOURCE?不要 USE_MISC 吗?博客里有很多乱七八糟的东西,这是怎么回事?

4

3 回答 3

11

简短的回答:某人在某处创建了一个名为“ time.h ”的随机文件。您的包含路径已包含此目录。这以不明显的方式使系统短路。该文件甚至不必使用,它可能是一个随机测试暂存文件,其中一个程序员放在一边,而不是包含在其中。它只需要存在,并且可以在您的更大包含路径中访问。这足以让你流连忘返。根本不是 FLTK 问题。

更长的答案: stat.h从基于__time_t st_atime等升级到基于 struct timespec st_atim等[注意末尾缺少 e] 用于处理纳秒级分辨率时间戳。但是 timespec 是在系统的time.h. 如果您在路径中的某处包含一个随机 time.h,这会影响包含,从而消除 struct timespec 的定义。

显然,同样的问题也是 FFMpeg v1.0 和 /include/libavutil 的问题。

底线:坚持没有人制作过名为“ time.h ”的文件。

于 2013-02-19T00:15:12.723 回答
4

实际上,当我在 Centos 6.5 中遇到此问题时,我使用了一个非常可靠的快速修复程序。以为我会分享以防其他人偶然发现此线程。有一个由https://github.com/tony2001制作和维护的存储库,它解决了 time.h 文件冲突的问题。

请按照以下方法修复它:

git clone https://github.com/tony2001/ffmpeg-php.git
cd ffmpeg-php
phpize
./configure
make && make install
于 2015-03-25T19:18:28.450 回答
-1

我意识到这个问题已经过时了,但我会发布我的经验,因为我现在刚刚浏览这本书,这发生在我身上。我能够通过重新启动运行磁盘的虚拟计算机来解决此问题。

我认为发生在我身上的是我通过将磁盘映像安装到我计算机的一个虚拟驱动器来运行虚拟机。当我完成一天的工作后,我会保存我的虚拟机状态,然后加载该状态并在以后继续处理它。但是,有时我会重新启动物理计算机,这会从驱动器中卸载 cd 映像,但我没有注意到这一点,因为虚拟机启动时没有问题,因为我只是重新加载保存状态,直到你的问题发生在我身上.

重新挂载磁盘映像,然后重新启动虚拟机为我解决了这个问题,对于通过虚拟机运行 livecd 映像的其他人来说可能也是如此。我认为可以解释这一点的唯一另一件事是,书中的某些程序可能会弄乱某些包含内容,并且重新启动只会将机器恢复到其原始的工作状态。

如果您在物理上运行磁盘,这可能对您没有帮助,但重新启动计算机可能是一个不错的尝试。附带说明一下,我最初是在我的旧笔记本电脑上实际运行 cd,并且书中的所有程序都运行良好。这令人沮丧,因为虚拟机给我带来了我最初没有物理运行实际磁盘的问题。

于 2016-10-29T13:33:28.963 回答