代码之家  ›  专栏  ›  技术社区  ›  StackedCrooked

在链接Visual Studio 2008 Express'/mtd'设置时增强崩溃

  •  1
  • StackedCrooked  · 技术社区  · 15 年前

    TLDR

    将我的新boost build与Visual Studio(/mtd)链接会导致boost在进入主函数之前引发“bad”alloc异常。

    细节

    我使用来自 Getting Started 指令。设置前提条件后,我使用了以下生成命令:

    bjam -j8 --build-dir="C:\Development\Boost\boost-build" --build-type=complete msvc stage
    

    上面的命令似乎构建了调试/发布和共享/静态构建的所有组合。

    然后我创建了一个空的Visual Studio项目,并在主文件中添加了以下代码:

    #include <boost/thread.hpp>
    
    int main()
    {
        return 0;
    }
    

    我还将代码生成设置更改为多线程调试(/mtd)。

    此时,我还没有在我的项目中配置任何库路径。因此生成以以下链接器错误结束:

    LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc90-mt-sgd-1_43.lib'
    

    好的,我在我的boost build中找到这个文件,并将其复制到“$(solutiondir)3rdparty\boost\u 1\u 43\u 0\libs”,然后将其添加到 其他库目录 . 下一个错误如下:

    LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc90-mt-sgd-1_43.lib'
    

    好的,我也在我的boost build目录中找到这个文件,并将其复制到我的库路径。

    在此之后,项目成功地构建,但是在进入主函数之前,boost代码中会抛出一个“bad ou alloc”异常。

    这里似乎有一个库不兼容。有人知道到底出了什么问题,怎么解决吗?

    更新

    自从 James McNellis 提到这可能是我尝试过的线程库的特定内容“程序选项”,而这个不会导致任何问题(但是主体仍然是空的)。

    使用Boost“信号”库的简单示例应用程序也可以正常工作。因此,正是线程库导致了一些问题。

    版本

    我现在使用的是Boost v1.43.0,我会看看是否能用v1.42重现这个问题。

    BCP

    我想提到的一个细节是,我使用的是精简版的Boost。我用以下方法创建了一个子集 bcp 效用:

    mkdir ./output
    bcp bind function lexical_cast noncopyable optional program_options smart_ptr signals signals2 thread ./output
    

    这可能不会导致“坏分配”…

    增压1.42

    我刚刚安装了Boost 1.42 BoostPro Installe R.一个快速的测试显示它可以像这样工作。奇怪…

    1 回复  |  直到 15 年前
        1
  •  1
  •   StackedCrooked    15 年前

    我的 解决方案 解决方法如下:

    • 使用安装增压器 BoostPro Installer . 它在“c:\program files”目录中安装boost。
    • 使用(包括的)bcp实用程序创建Boost存储库的精简副本。以我原来的帖子为例。
    • 将生成的邮件头添加到我的项目文件夹
    • 同时将所需的libs复制到项目文件夹中。
    • 根据需要更新Visual Studio项目include和链接器路径。
    • 测试它。
    • 把一切交给SVN。
    • 瞧,我知道我的电池里有代码库:)

    事实上,我最初的问题仍然没有答案,我仍然不知道为什么我的助推1.43失败了。这可能是一些配置问题。然而,这是一个令人满意的解决方案。

    顺便说一下,我恢复到Boost1.42的原因仅仅是因为BoostPro安装程序还不支持1.43。