5

動作することが知られている大規模な古いシステムをUbuntu64ビット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」というタイトルのランダムファイルを作成しました。インクルードパスには、これが含まれるディレクトリが含まれています。これは、システムを非自明な方法で短絡させています。このファイルは使用する必要はありません。プログラマーの1人がサイドでまとめたランダムなテストスクラッチファイルであり、組み込まれていません。単に存在し、より大きなインクルードパスで到達可能である必要があります。これはあなたをホースでつなぐのに十分でしょう。FLTKの問題ではありません。

長い答え: ナノ秒の解像度のタイムスタンプを処理するために、ベースなど stat.hからベースなどにアップグレードされました[最後にeがないことに注意してください]。ただし、timespecはシステムので定義されています。パスのどこかにランダムなtime.hを含めると、インクルードがシャドウされ、structtimespecの定義が消去されます。__time_t st_atimestruct timespec st_atimtime.h

どうやら、これと同じ問題はFFMpegv1.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

この質問は古いと思いますが、今ちょうど本を読んでいて、これが私に起こったので、私の経験を投稿します. ディスクを実行している仮想コンピューターを再起動することで、問題を解決できました。

私に起こったことは、ディスク イメージをコンピューターの仮想ドライブの 1 つにマウントして、仮想マシンを実行していたことです。その日の作業が終わったら、仮想マシンの状態を保存し、その状態をロードして、後で作業を続けました。ただし、ドライブから CD イメージをアンマウントする物理コンピューターを再起動することもありましたが、問題が発生するまで、保存状態をリロードしていたので仮想マシンが問題なく起動したため、これに気付きませんでした。 .

ディスク イメージを再マウントしてから仮想マシンを再起動すると、問題が解決しました。これを説明できると私が考えることができる唯一の他のことは、本のプログラムのいくつかがいくつかのインクルードを台無しにする可能性があり、再起動するとマシンが元の動作状態に戻るだけであるということです.

ディスクを物理的に実行している場合、これはおそらく役に立ちませんが、コンピューターを再起動することをお勧めします。余談ですが、もともと私は古いラップトップで CD を物理的に実行していましたが、本のすべてのプログラムは問題なく動作していました。仮想マシンが、物理的に実際のディスクを実行していなかった問題を引き起こしたので、これはイライラしました。

于 2016-10-29T13:33:28.963 に答える