6

gtk スタック (最新の gtk2 バージョン、2.24) をコンパイルしようとしていますが、関連していると思われるエラーが多数発生しています。つまり、__locale_tstring.h と time.h から見つけることがLC_ALL_MASKできず、どちらも見つけることができません (locale.h にある必要があります)。

これらの問題はすべて__USE_XOPEN2K8#defined ではないことに関連していることがわかりました。何__USE_XOPEN2K8のために、どうすれば適切に設定できますか?

たとえば、glib、gtk などの ./configure にフラグを渡す必要がありますか? それとも、gcc または glib のビルド中に何かを変更する必要がありますか? #define __USE_XOPEN2K8それが何をするのかわからないまま、自分の情報源にふりかけるだけではだめです。古いバージョンのみを含む古い CentOS (5.8) で gtk ライブラリを動作させようとしているため、非標準のプレフィックスでインストールされている gcc-4.6.3 と glibc-2.16.0 を使用していることに注意してください。

また、このバグレポートなど、いくつかの場所で欠落__locale_tが言及されていることに注意してください。いくつかのファイルを追加することもできますが、適切な解決策は設定することです。#include <xlocale.h>__USE_XOPEN2K8


編集:問題を説明しているこのスレッドを見つけました。どうやら、ホスト システムのヘッダーは、新しいコンパイラのヘッダーに "fixincluded" されます。リンクされた投稿は、features.h を編集することを提案しています。後で gcc / glibc を再コンパイルする必要があるかどうか (および上書きするのではなく、新しい features.h を取得する方法) を知っている人はいますか?

4

4 に答える 4

6

これらのマクロを明示的に定義または定義解除しない限り、定義されている場合__USE_GNU__USE_XOPEN2K8常に同様に定義されます。これらのマクロは実行してはなりません。_GNU_SOURCE代わりに、最初のヘッダーを含める前に、_XOPEN_SOURCE {500,600,700,...}などのマクロを使用してください。これは、glibc ヘッダーで GNU 機能セットを選択し、コマンド ラインで定義する方法として推奨される方法です ( -D_GNU_SOURCE)。

-stdまたは、コマンド ライン スイッチ ( gnu89、など)を使用して、gcc に GNU 拡張機能の使用を指定することもできますgnu99

于 2013-09-24T15:29:57.257 に答える
0

コンパイラを使用するときに知っているように、その動作は に保存されているいくつかの ENV マクロに依存しますfeature.h。そのため、コンパイラを変更することでコンパイラを構成できます。まず、 を使用してコンパイラが使用するファイルをg++ -E youfile > log確認し、見つからない場合はを使用して を見つける必要があります。ファイルの最後に追加します。コンパイラをインストールするときに、設定を間違えている可能性があります。feature.hg++ -E -dM /path/to/feature.h>log__USE_XOPEN2K8#define __USE_XOPEN2K8 1

于 2016-02-27T07:44:13.623 に答える