Box2D编译麻烦。 nullptr

时间:2016-06-28 17:00:01

标签: c++ linux box2d nullptr

人。 我正在从源代码编译Box2D,并给出一些麻烦。 我在Box2D目录中运行了preshke的lash版本,然后我切换到/ Build / gmake并运行make。 请回复我:

../../Box2D/Dynamics/b2Body.cpp: In member function ‘void b2Body::DestroyFixture(b2Fixture*)’:
../../Box2D/Dynamics/b2Body.cpp:216:17: error: ‘nullptr’ was not declared in this scope
if (fixture == nullptr)
               ^

恩可以帮助我吗?我使用的是Ubuntu Linux 14.04。

2 个答案:

答案 0 :(得分:0)

  

我通过将prestke生成的-std = gnu ++ 0x添加到makefile来解决我的问题

答案 1 :(得分:0)

premake文件(premake5.lua)提到了这个片段的C ++ 11:

filter { "language:C++", "toolset:gcc" }
    buildoptions { "-std=c++11" }

它似乎不起作用。这可能与this issue有关,其解决方案是使用cppdialect,它只能从premake 5 alpha 12获得(在撰写本文时,最后一个版本是alpha 11,这意味着你需要下载最新版本直接在GitHub上。)

作为快速解决方案,您可以按照OP自己的答案:通过添加-std=c++11(分别为gnu++11c++14来修改Box2D的Make文件(如果需要,还可以使用HelloWorld和Testbed) }等等到ALL_CXXFLAGS

如果您更喜欢修改预制本身:

  1. premake5.lua 中,注释掉上面提到的过滤器/ buildoptions片段
  2. 在项目Box2D(如果需要还有HelloWorld和Testbed)中,添加flags "C++11"(您还可以添加buildoptions { "-std=c++11" },唯一的区别是它还会将选项添加到ALL_CFLAGS)
  3. 示例:

    project "Box2D"
        kind "StaticLib"
        language "C++"
        flags "C++11"  -- added
        files { "Box2D/**.h", "Box2D/**.cpp" }
        includedirs { "." }
    

    我打算通过此更改向Box2D的存储库发送PR。

    编辑:完成,这是PR