麻烦编译分形动画程序Xlib和过剩

时间:2015-06-29 06:09:55

标签: c++ compilation fractals

从此来源下载代码:http://n.ethz.ch/~vartokb/gl-shaders.html

我运行make文件,我得到了对xlib和glut库的未定义引用。如,

   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)

Makefile:

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

我已经通过运行:

安装了Xlib
 :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/

我刚刚安装了freeglut。当我列出makefile中链接的目录的内容时,我看到:

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

和Xlib:

nice -20 zcat /var/detail-20150418.gz | sed '/./{H;$!d;};x;/46.241.178.96/!d' > /tmp/new.txt 
nice -20 sed -n '/Acct-Status-Type/,/Called-Station-Id/p' /tmp/new.txt > /tmp/new_2.txt
rm /tmp/new.txt
nice -20 sed '/Acct-Status-Type/{x;p;x;}' /tmp/new_2.txt > /tmp/new_3.txt
rm /tmp/new_2.txt
grep -v '\(Acct-Authentic\|Acct-Input-Octets\|Acct-Input-Gigawords\|Acct-Output-Octets\|Acct-Output-Gigawords\|Acct-Input-Packets\|Acct-Output-Packets\|Acct-Session-Time\)' /tmp/new_3.txt > /tmp/new_4.txt
rm /tmp/new_3.txt
sed 's/^[ \t]*//;s/[ \t]*$//' /tmp/new_4.txt | paste -s -d ',' | sed 's/,,/\n/g' | sed 's/^[,]*//;s/[,]*$//' > /tmp/new_5.txt 
rm /tmp/new_4.txt
sed 's/Acct-Status-Type = //' /tmp/new_5.txt | sed 's/User-Name = //' |sed 's/Event-Timestamp = //' | sed 's/Acct-Terminate-Cause = //' | sed 's/Framed-IP-Address = //' | sed 's/Called-Station-Id = //' > /tmp/new_6.txt
rm /tmp/new_5.txt
awk -F"," '{ print $3 "," $1 "," $2 "," $6 "," $5 "," $4}' /tmp/new_6.txt | sed -e 's/"//g' | sed -e 's/,,/,/g' > /tmp/log.txt
rm /tmp/new_6.txt

当我拥有编译所需的所有文件时,为什么会得到未定义的引用?

1 个答案:

答案 0 :(得分:0)

我的问题是参数排序,因为用户cyberguijarro指出:Linker problems in Ubuntu 11.10

  

@boto我知道。实际上,问题在于参数顺序。   Ubuntu 11.10发布了GCC 4.6.1,显然引入了更严格的内容   参数排序约束。 g ++ test.cpp -lX11工作正常。 -   cyberguijarro 12年1月24日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

允许它编译。<​​/ p>