/usr/bin/ld: ../freeglut/libfreeglut_static.a(freeglut_state.o): 未定义对 Box2d 中符号 'XGetWindowAttributes' 的引用

/usr/bin/ld: ../freeglut/libfreeglut_static.a(freeglut_state.o): undefined reference to symbol 'XGetWindowAttributes' in make of Box2d

我按照 this 进行操作,它向我展示了安装步骤。
我之前安装了依赖项。
unzip Box2D_v2.1.2.zip cd Box2D_v2.1.2/Box2D/Build cmake .. make

在 make 的最后一步,我收到以下消息。
/usr/bin/ld: ../freeglut/libfreeglut_static.a(freeglut_state.o): undefined reference to symbol 'XGetWindowAttributes' //usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status
我在网上搜索过每个人都说要使用 -X11 标志进行编译,但这是一个 make 文件,我不太了解

构建示例,box2d_2.3.1:旧软件,使用"older"编译器...

tar xvf box2d_2.3.1+ds.orig.tar.xz
cd box2d-2.3.1/Box2D/
mkdir build && cd build/
CC=gcc-5 CXX=g++-5 cmake -DBOX2D_INSTALL=ON -DBOX2D_BUILD_SHARED=ON -DBOX2D_BUILD_STATIC=ON -DBOX2D_BUILD_EXAMPLES=OFF ../
make
.
[100%] Linking CXX shared library libBox2D.so
[100%] Built target Box2D_shared

Link, box2d_2.3.1 http://cdn-fastly.deb.debian.org/debian/pool/main/b/box2d/box2d_2.3.1+ds.orig.tar.xz

注意 :与 2010 年版本一样有效 Box2D_v2.1.2 https://code.google.com/archive/p/box2d/downloads

出现此错误是因为 Testbed 中的 CMakeLists.txt 文件没有为 Linux 配置。

要解决此问题,请打开文件 Box2D_v2.1.2/Box2D/Testbed/CMakeLists.txt 并相应地更改以下行。

来自这里:

if(APPLE)
         # We are not using the Apple's framework version, but X11's
         include_directories( /usr/X11/include )
         link_directories( /usr/X11/lib )
         set (OPENGL_LIBRARIES GL GLU GLUT X11)
endif(APPLE)

为此:

if(UNIX)
        # We are not using the Apple's framework version, but X11's
        include_directories( /usr/X11/include )
        link_directories( /usr/X11/lib )
        set (OPENGL_LIBRARIES GL GLU X11)
endif(UNIX)

这对我有用。