アプリケーションを BSD プラットフォームから Linux ボックスに移植中です。コンパイル時に、ヘッダー ファイルの一部が を呼び出していることがわかりましたが<bits/stl_alloc.h>
、これは私のコンピューターにはありません。これをどこで見つけられるか、および/または欠落している理由について誰かが知っていますか?
GCC4.4.4 を搭載した Fedora 12 マシンを実行しています。
エラー メッセージは、ビット ディレクトリのファイルが見つからないことを示しています。これには、次の 2 つの方法が考えられます。
このファイルは、アプリケーションから明示的に含めました。それは標準のヘッダーではなく、標準のインクルードパスにない可能性があるため、それはあなたのせいです。これは避けるべきです。OS と対話するために必要なメカニズムのほとんどは、標準ライブラリ (または移植性のために特別に設計された他のライブラリ) にあるため、特定の STL 実装のビットを使用するよりも優れたソリューションがあります。
このファイルは、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 のみでビルドした場合は、まったく気付かなかったはずです。