如何将 glut 库嵌入到 C++ 项目中?
How to embed glut library into c++ project?
我有一个 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
但是有同样的错误信息。发生什么事了?
我已经使用此命令成功链接了我的 GLUT 程序
g++ -o ogl-test main.cpp freeglut-3.0.0/lib/libglut.a -lGL -lGLU -lX11 -lXxf86vm -lXext -lXrandr -lXt -lXi
希望这对您也有用。确保更改过剩库的路径。
我有一个 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
但是有同样的错误信息。发生什么事了?
我已经使用此命令成功链接了我的 GLUT 程序
g++ -o ogl-test main.cpp freeglut-3.0.0/lib/libglut.a -lGL -lGLU -lX11 -lXxf86vm -lXext -lXrandr -lXt -lXi
希望这对您也有用。确保更改过剩库的路径。