如何将glut库嵌入C ++项目?

时间:2018-11-17 22:25:09

标签: c++ linux opengl g++ glut

我有一个c ++项目,但是在分发此项目时,需要安装libglut.so.3。:

./bin: error while loading shared libraries: libglut.so.3: cannot open shared object file: No such file or directory

我希望用户不必安装此依赖项。如何将库嵌入项目?

我尝试使用g ++在c ++项目中编译为静态库。我的make文件包含:

@g++ \
    -o bin \
    -std=c++11 \
    main.cpp \
    -lm -lGL -lGLU -lglut \
    ;

我尝试将glut定义为静态库:

-lm -lGL -lGLU -Wl,-Bstatic -lglut -Wl,-Bdynamic

但是编译器说:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libglut.a(libglut_la-freeglut_state.o): undefined reference to symbol 'XGetWindowAttributes'
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libX11.so: error adding symbols: DSO missing from command line

我尝试下载freeglut-3.0.0并编译为静态库:

更改CMakeLists.txt文件以进行静态编译:

OPTION(FREEGLUT_BUILD_SHARED_LIBS "Build FreeGLUT shared library." OFF)
OPTION(FREEGLUT_BUILD_STATIC_LIBS "Build FreeGLUT static library." ON)

CMakeCache.txt中:

//Build FreeGLUT shared library.
FREEGLUT_BUILD_SHARED_LIBS:BOOL=OFF

//Build FreeGLUT static library.
FREEGLUT_BUILD_STATIC_LIBS:BOOL=ON

并编译它:

$ cmake .
$ make
[ 62%] Built target freeglut_static
...
[100%] Built target shapes_static

并验证:

$ ll lib/libglut.a 
-rw-r--r-- 1 me me 690860 nov 17 19:11 lib/libglut.a
$ file lib/libglut.a
lib/libglut.a: current ar archive

现在,更改makefile:

-lm -lGL -lGLU freeglut-3.0.0/lib/libglut.a

并编译:

$ make
usr/bin/ld: freeglut-3.0.0/lib/libglut.a(fg_state_x11.c.o): undefined reference to symbol 'XGetWindowAttributes'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line

但是,同样的错误消息。

在类似的问题:fglut/libfglut.a(freeglut_state.o): undefined reference to symbol 'XGetWindowAttributes'中,我尝试将x11库添加到项目中:

-lm -lGL -lGLU -lX11 freeglut-3.0.0/lib/libglut.a

或者:

-lm -lGL -lGLU -lX11 -Wl,-Bstatic -lglut -Wl,-Bdynamic

但是有相同的错误消息。发生什么事了?

1 个答案:

答案 0 :(得分:1)

我已经使用此命令成功链接了我的GLUT程序

g++ -o ogl-test main.cpp freeglut-3.0.0/lib/libglut.a -lGL -lGLU -lX11 -lXxf86vm -lXext -lXrandr -lXt -lXi

希望这对您也有用。确保将路径更改为glut库。