Как встроить библиотеку перенасыщения в c ++ проект? - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть проект на c ++, но при его распространении необходимо установить libglut.so.3.:

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

Я хочу, чтобы пользователь не устанавливал эту зависимость.Как встроить библиотеку в проект?

Я пытаюсь скомпилировать как статическую библиотеку в проекте C ++, используя g ++.Мой 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

Теперь измените make-файл:

-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): неопределенная ссылка на символ 'XGetWindowAttributes' , я пытаюсь добавить библиотеки x11 в проект:

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

Или:

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

Но есть то же сообщение об ошибке.Что случилось?

1 Ответ

0 голосов
/ 20 ноября 2018

Я успешно связал свою программу GLUT с помощью этой команды

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

Надеюсь, это также сработает для вас. Убедитесь, что вы изменили путь к библиотеке перенасыщения.

...