解决编译Boost出现诡异的“C1083: 无法打开包括文件:"stddef.h"”问题


  • 网站研运

    TIM图片20190929161739.jpg
    最近给我们的小组构建新一个版本的USD应用,总是在构建Boost的过程中出现问题。报的错误是C1083,大概内容是这样的:

    boost fatal error C1083: cannot open include file: “stddef.h”: No such file or directory

    这个在USD的Boost文件夹中(类似D:\Develop\USD_build_19_11\src\boost_1_65_1)文件夹中的log.txt找到错误。

    因为我遇到的这个错误比较特殊,查了很多资料,包括如何设置MSVC 2017的环境变量:INCLUDELIBLIBPATH等,但是问题依然得不到解决。真是一件悲惨的故事啊。后面我查找了很久有关Boost编译的问题,包括了解Boost.Build这个构建系统以及构建脚本(总感觉构建脚本和Python很像,又有点Javascript的感觉),反正Boost.Build这个构建系统是很难用的了。我在构建Boost的时候是这么操作的:

    1. 执行bootstrap脚本:

    .\bootstrap.bat

    1. 开始使用b2构建,构建我们需要的模块:atomicprogram_optionsregexpythonfilesystem

    .\b2 --prefix="D:\Develop\USD_build_19_11" --build-dir="D:\Develop\USD_build_19_11\build\boost" -j4 address-model=64 link=shared runtime-link=shared threading=multi variant=release --with-atomic --with-program_options --with-regex --with-python --with-filesystem toolset=msvc-14.1 install

    后面一直报的是C1083错误。最后我偶然发现,Boost.Build向Temp目录写了批处理文件,名称类似这样的:

    b2_msvc_14.1_vcvars32_.cmd
    b2_msvc_14.1_vcvarsx86_amd64_.cmd
    

    看看构建日期,原来是二十多天前产生的。竟然放在临时目录没有删掉!我想可能以前我安装了Windows SDK又删掉了Windows SDK,所以路径不正确导致的。于是果断删掉这两个批处理文件,问题得到解决了!


Log in to reply
 

走马观花

最近的回复

  • 诶 没有Linux吗??

    read more
  • 萌梦 男孩,女孩,和蛋

    menghome.png

    read more
  • 设计模式-工厂模式

    使用qt/qml来演示设计模式效果,便于学习理解

    1)定义创建对象的接口,封装对象的创建
    2)使具体化类的工作延迟到工厂子类中

    bg.png
    image.png

    1. 工厂类

    createProduct使用了参数来选择要创建哪个产品

    #ifndef FACTORY_H #define FACTORY_H #include <QObject> class Product; class QString; class Factory: public QObject { Q_OBJECT public: virtual ~Factory() = 0; virtual Product* createProduct(QString type) = 0; protected: Factory(); }; class ConcreteFactory: public Factory { Q_OBJECT public: ~ConcreteFactory(); ConcreteFactory(); public slots: Product* createProduct(QString type); }; #endif // FACTORY_H #include "factory.h" #include "product.h" #include <QtQml/qqml.h> Factory::~Factory() { } Factory::Factory() { qmlRegisterType<Product>("Product", 1, 0, "Product"); } ConcreteFactory::~ConcreteFactory() { } ConcreteFactory::ConcreteFactory() { } Product *ConcreteFactory::createProduct(QString type) { if(type == "boy") return static_cast<Product *>(new ConcreteProduct1()); else if(type == "girl") return static_cast<Product *>(new ConcreteProduct2()); return static_cast<Product *>(new ConcreteProduct1()); } 2 产品类

    一个产品是萌梦男,一个产品是萌梦女

    #ifndef PRODUCT_H #define PRODUCT_H #include <QObject> class Product: public QObject { Q_OBJECT public: virtual ~Product() = 0; Q_PROPERTY(QString icon READ icon NOTIFY iconChanged) QString m_icon; QString icon() const { return m_icon; } signals: void iconChanged(QString icon); protected: Product(); signals: public slots: }; class ConcreteProduct1: public Product { Q_OBJECT public: ~ConcreteProduct1(); ConcreteProduct1(); }; class ConcreteProduct2: public Product { Q_OBJECT public: ~ConcreteProduct2(); ConcreteProduct2(); }; #endif // PRODUCT_H #include "product.h" Product::~Product() { } Product::Product() { } ConcreteProduct1::~ConcreteProduct1() { } ConcreteProduct1::ConcreteProduct1() { m_icon = "qrc:/images/boy.png"; } ConcreteProduct2::~ConcreteProduct2() { } ConcreteProduct2::ConcreteProduct2() { m_icon = "qrc:/images/girl.png"; } 3. main.qml

    使用timer,canvas,listview等实现一个自动化生产的动画效果

    源代码

    Fork me on Gitee

    read more
  • blender建模 章鱼
    捕获2.PNG 😵

    read more

关注我们

微博
QQ群