2

我正在将应用程序从 BSD 平台移植到 Linux 机器上。编译时,我发现一些头文件调用了<bits/stl_alloc.h>我的计算机中缺少的一些头文件。有谁知道我在哪里可以找到它和/或为什么它丢失了?

我正在使用 GCC4.4.4 运行 Fedora 12 机器。

4

1 回答 1

1

您的错误消息显示缺少 bits 目录中的文件。这可能会导致两种可能的方式:

  1. 您从应用程序中明确包含此文件。那是您的错,因为它不是标准标头,并且可能不在您的标准包含路径中。你应该避免这样做。大多数与操作系统交互的必要机制都在标准库中(或在其他专为可移植性设计的库中),因此您拥有比使用特定 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 回答