Проблемы с компиляцией фрактальной анимационной программы Xlib и перенасыщением

Скачал код из этого источника: http://n.ethz.ch/~vartokb/gl-shaders.html

Я запускаю файл make и получаю неопределенные ссылки на библиотеки xlib и glut. например.,

  undefined reference to `XOpenDisplay'
undefined reference to `XDefaultScreen'
undefined reference to `glXChooseVisual'
.
.
.
undefined reference to `__glewGenBuffers'
undefined reference to `__glewBindBuffer'
undefined reference to `__glewBufferData'

Строка компиляции выглядит следующим образом, а make-файл находится ниже:

   g++ -L/usr/include/GL/ -L/usr/include/X11/ -lm -lrt -lglut -lGLEW -lGL -lGLU -lX11 main.o events.o graphics.o -o gl-shaders

Makefile:

NAME = gl-shaders
CXX = g++
CXXFLAGS = -O3
LDFLAGS = -L/usr/include/GL/ -L/usr/include/X11/ -lm -lrt -lglut -lGLEW -lGL -lGLU -lX11
SRCS = main.cpp events.cpp graphics.cpp
OBJS = $(SRCS:%.cpp=%.o)
HDRS = config.hpp main.hpp

all: $(NAME)

$(NAME): $(OBJS)
$(CXX) $(LDFLAGS) $(OBJS) -o $(NAME)

.cpp.o:
$(CXX) $(CFLAGS) $(LFLAGS) -c $< -o $@

$(OBJS): $(HDRS)

clean:
rm -f $(OBJS)
rm -f $(NAME)

Я установил Xlib, запустив:

sudo aptitude install xorg-dev
sudo apt install xorg-dev
sudo apt-get install libx11-dev

И я установил freeglut некоторое время назад. Когда я перечисляю содержимое каталогов, связанных в make-файле, я вижу:

 :l /usr/include/GL/
freeglut_ext.h  freeglut_std.h  glew.h   gl.h         glu.h         glut.h   glxext.h  glxint.h      glxmd.h     glxtokens.h  wglew.h
freeglut.h      glcorearb.h     glext.h  gl_mangle.h  glu_mangle.h  glxew.h  glx.h     glx_mangle.h  glxproto.h  internal/

и для Xlib:

l /usr/include/X11/
ap_keysym.h   Constraint.h  DECkeysym.h  HPkeysym.h    IntrinsicP.h  RectObj.h     ShellI.h      TranslateI.h  Xatom.h   Xdmcp.h       XKBlib.h    Xmd.h      Xpoll.h      Xthreads.h  Xwindows.h
bitmaps/      ConvertI.h    dri/         ICE/          keysymdef.h   RectObjP.h    ShellP.h      VarargsI.h    Xauth.h   XF86keysym.h  XlibConf.h  Xmu/       Xproto.h     Xtos.h      Xwinsock.h
CallbackI.h   Core.h        EventI.h     ImUtil.h      keysym.h      ResConfigP.h  SM/           Vendor.h      Xaw/      Xft/          Xlib.h      Xosdefs.h  Xprotostr.h  Xtrans/
Composite.h   CoreP.h       extensions/  InitialI.h    Object.h      ResourceI.h   StringDefs.h  VendorP.h     Xcms.h    Xfuncproto.h  Xlibint.h   Xos.h      Xregion.h    Xutil.h
CompositeP.h  CreateI.h     fonts/       Intrinsic.h   ObjectP.h     SelectionI.h  Sunkeysym.h   Xalloca.h     Xcursor/  Xfuncs.h      Xlib-xcb.h  Xos_r.h    Xresource.h  Xw32defs.h
ConstrainP.h  cursorfont.h  HookObjI.h   IntrinsicI.h  PassivGraI.h  Shell.h       ThreadsI.h    Xarch.h       Xdefs.h   X.h           Xlocale.h   xpm.h      xshmfence.h  XWDFile.h

Почему я получаю неопределенные ссылки, когда у меня есть все необходимые файлы для компиляции?

2

Решение

Моя проблема заключалась в упорядочении параметров, как указывает пользователь cyberguijarro: Проблемы с линкером в Ubuntu 11.10

@boto Я знаю это. На самом деле проблема была в порядке параметров.
Ubuntu 11.10 поставляется с GCC 4.6.1, который, по-видимому, вводит более строгие
ограничения порядка параметров. g ++ test.cpp -lX11 работает нормально. —
Cyberguijarro 24 января ’12 в 9:37

Таким образом, изменив строку компиляции из этого:

g++ -I/usr/include/GL/ -lglut -lGL -lGLEW -lGLU -I/usr/include/X11/ -lm -lrt -lX11 main.o events.o graphics.o -o gl-shaders

к этому:

g++ main.o events.o graphics.o -I/usr/include/GL/ -lglut -lGL -lGLEW -lGLU -I/usr/include/X11/ -lm -lrt -lX11 -o gl-shaders

позволил это скомпилировать.

0

Другие решения


По вопросам рекламы [email protected]