GLVis:链接器错误“对符号‘XGetWindowAttributs’未定义引用”

GLVis:链接器错误“对符号‘XGetWindowAttributs’未定义引用”

我正在尝试安装视觉系统它有一个很长的依赖项列表(见文章末尾),所有这些依赖项都是我通过apt-get或手动编译安装的。但是,当我尝试制作 GLVis 时,我遇到了链接器错误。具体来说,对符号“获取窗口属性':

stan@ubuntu:~/Downloads/glvis-3.1$ make
g++ -O3 -I../mfem-3.3.2 -DGLVIS_MULTISAMPLE=4 -DGLVIS_MS_LINEWIDTH=1.4 -I/usr/include -DGLVIS_USE_LIBPNG -DGLVIS_USE_FREETYPE -I/usr/include/freetype2 -o glvis glvis.cpp -Llib -lglvis -L../mfem-3.3.2 -lmfem -lrt -L -lX11 -lGL -lGLU -lpng -lfreetype -lfontconfig -lpthread
/usr/bin/x86_64-linux-gnu-ld: lib/libglvis.a(aux_vis.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
makefile:187: recipe for target 'glvis' failed
make: *** [glvis] Error 1

make没有返回任何其他错误,因此我认为我没有遗漏提供任何所需的库。在清除和重新安装了大量软件包之后,我选择寻求您的帮助,因为我甚至无法判断错误是否出在我这边。我对 Ubuntu 和 X11 的内部知识知之甚少,如果您能提供帮助,我将不胜感激。

我该如何尝试解决这个问题?这个错误在其他人身上也出现过,但我无法理解,我尝试了他们的解决方案(如果适用的话),但没有得到任何结果。

我在虚拟机上使用 Ubuntu 18.04 64 位。


GLVis 的安装说明如下:

GLVis 是一个 X11 应用程序,可以在 Linux/Unix 系统(包括使用 X11/XQuarz 应用程序的 Mac OS X)上构建,也可以在 Windows 下使用 Cygwin/X 构建。

除了 C++ 编译器之外,GLVis 还依赖于以下外部包:

  • MFEM 库(使用最新版本)以及 MFEM 所依赖的任何库 mfem.org

  • X11、GL 和 GLU 库 x.org、opengl.org、mesa3d.org

  • libpng 或 libtiff 库;用于截取屏幕截图(可选)libpng.org、libtiff.org

  • FreeType 2 和 Fontconfig 库;用于字体渲染(可选)freetype.org、fontconfig.org

有两种构建系统,一种基于 GNU make,一种基于 CMake,如下所述。选择与您用于构建 MFEM 的构建系统相匹配的系统。

答案1

问题出在 Ubuntu 18.04 LTS 中不再使用的旧环境变量上,称为$X11 库目录。这不会计算任何值,并且会破坏姆皮克编译器-L用来。

见下文:

mpicxx -O3 -I../mfem -I../mfem/../hypre-2.10.0b/src/hypre/include -DGLVIS_MULTISAMPLE=4 -DGLVIS_MS_LINEWIDTH=1.4 -I/usr/include -DGLVIS_USE_LIBPNG -DGLVIS_USE_FREETYPE -I/usr/include/freetype2 -o glvis glvis.cpp -Llib -lglvis -L../mfem -lmfem -L../mfem/../hypre-2.10.0b/src/hypre/lib -lHYPRE -L../mfem/../metis-4.0 -lmetis -lrt -L -lX11 -lGL -lGLU -lpng -lfreetype -lfontconfig -lpthread

注意随机“-L”“-lX11”

应该是这样的:

mpicxx -O3 -I../mfem -I../mfem/../hypre-2.10.0b/src/hypre/include -DGLVIS_MULTISAMPLE=4 -DGLVIS_MS_LINEWIDTH=1.4 -I/usr/include -DGLVIS_USE_LIBPNG -DGLVIS_USE_FREETYPE -I/usr/include/freetype2 -o glvis glvis.cpp -Llib -lglvis -L../mfem -lmfem -L../mfem/../hypre-2.10.0b/src/hypre/lib -lHYPRE -L../mfem/../metis-4.0 -lmetis -lrt -lX11 -lGL -lGLU -lpng -lfreetype -lfontconfig -lpthread

因此,要解决这个问题,请更改makefile 中的第 #121 行读书:

GL_LIBS = -lX11 -lGL -lGLU

相关内容