2

アプリケーションを BSD プラットフォームから Linux ボックスに移植中です。コンパイル時に、ヘッダー ファイルの一部が を呼び出していることがわかりましたが<bits/stl_alloc.h>、これは私のコンピューターにはありません。これをどこで見つけられるか、および/または欠落している理由について誰かが知っていますか?

GCC4.4.4 を搭載した Fedora 12 マシンを実行しています。

4

1 に答える 1

1

エラー メッセージは、ビット ディレクトリのファイルが見つからないことを示しています。これには、次の 2 つの方法が考えられます。

  1. このファイルは、アプリケーションから明示的に含めました。それは標準のヘッダーではなく、標準のインクルードパスにない可能性があるため、それはあなたのせいです。これは避けるべきです。OS と対話するために必要なメカニズムのほとんどは、標準ライブラリ (または移植性のために特別に設計された他のライブラリ) にあるため、特定の STL 実装のビットを使用するよりも優れたソリューションがあります。

  2. このファイルは、STL の標準ヘッダーの一部から間接的にインクルードされます。問題は、Fedora での STL 実装は移植可能であり、BSD をサポートする可能性があるということです。ヘッダーに次のコードを含めることができます。

    #ifdef __BSD__
    // BSD-specific include file
    #include <bits/stl_alloc.h>
    #elsif defined __LINUX__
    #include <bits/linux_alloc.h>
    #endif
    

    通常、Linux で開発されたプログラムには正しいファイルが含まれます。ただし、プログラムが独自に BSD フィンガープリントを定義している可能性があり、このフィンガープリントは STL 実装によって、BSD 固有の部分を含める必要があると誤解される可能性があります。また、BSD のみでビルドした場合は、まったく気付かなかったはずです。

于 2010-08-12T19:53:13.440 に答える