2013-04-18 86 views
1

我想建立libCVD为了与ROS(从www.ros.org)使用。 我的问题是,我收到以下错误:libcvd - 未定义参考“×......”而编译C++

make[3]: Entering directory `/opt/ros/groovy/stacks/tum_ardrone/thirdparty/libcvd/build' 
/usr/bin/g++-4.6 -o progs/cvd_display_image progs/cvd_display_image.o -L. -lcvd -ltiff -ljpeg -lpng -lpng -llapack -lGLU -lGL -lrt -L -lX11 -lXext -pthread 

./libcvd.so: undefined reference to `XMoveWindow' 
./libcvd.so: undefined reference to `XCreateGlyphCursor' 
./libcvd.so: undefined reference to `XStoreName' 
./libcvd.so: undefined reference to `XLookupString' 
./libcvd.so: undefined reference to `XFreeFont' 
./libcvd.so: undefined reference to `XSetClassHint' 
./libcvd.so: undefined reference to `XCreateWindow' 
./libcvd.so: undefined reference to `XCreateColormap' 
./libcvd.so: undefined reference to `XOpenDisplay' 
./libcvd.so: undefined reference to `XDestroyWindow' 
./libcvd.so: undefined reference to `XCloseDisplay' 
./libcvd.so: undefined reference to `XUnmapWindow' 
./libcvd.so: undefined reference to `XNextEvent' 
./libcvd.so: undefined reference to `XSetWMProtocols' 
./libcvd.so: undefined reference to `XResizeWindow' 
./libcvd.so: undefined reference to `XMapWindow' 
./libcvd.so: undefined reference to `XSelectInput' 
./libcvd.so: undefined reference to `XFlush' 
./libcvd.so: undefined reference to `XWarpPointer' 
./libcvd.so: undefined reference to `XLoadQueryFont' 
./libcvd.so: undefined reference to `XDefineCursor' 
./libcvd.so: undefined reference to `XInternAtom' 
./libcvd.so: undefined reference to `XQueryPointer' 
./libcvd.so: undefined reference to `XUndefineCursor' 
./libcvd.so: undefined reference to `XGetWindowAttributes' 
./libcvd.so: undefined reference to `XPending' 
collect2: ld returned 1 exit status 
make[3]: *** [progs/cvd_display_image] Error 1 
make[3]: Leaving directory `/opt/ros/groovy/stacks/tum_ardrone/thirdparty/libcvd/build' 
make[2]: *** [libcvd_built] Error 2 

有近类似的错误(undefined reference error while compiling libcvd)的计算器等问题。

我试图像它暗示有找出为什么没有与第二-L选项指定的路径。所以我结束了项目configure.in文件,我相信错误发生。 但我没有这个构建系统的经验,所以帮助会很好。

configure.in文件正在https://dl.dropboxusercontent.com/u/16804463/configure.in

由于可提前。

回答

2

在其他SO问题所选择的解决方案是不正确的。正确的解决方案是未选择的解决方案:错误是您的链接行中缺少路径。您的链接包含:-L -lX11。在-L之后应该有一个路径名。由于没有,链接器假定路径名是下一个参数,-lX11。这意味着链接器不链接实际的libX11.so库,因为它将库引用视为路径。

您需要查看您的Makefile并找到链接cvd_display_image.o目标的规则,并查看此处发生了什么。正如在另一个SO答案中提到的,很可能你会发现链接线类似于-L$(SOME_VARIABLE),并且该变量为空。您需要将该变量设置为某个值,可能通过运行make SOME_VARIABLE=.make SOME_VARIABLE=/usr/lib或其他任何值。

眼看configure.in文件也不是那么有用:重要的部分是makefile文件。

在任何情况下,你一定要报告给该软件的维护人员,使他们能够解决这个问题:很明显,他们有一个真正的错误这里多人正在运行到它。

2

我有类似的错误。 我意识到libcvd似乎依赖于以下3个库。

  • LAPACK
  • BLAS
  • 香椿

这些都是数学库。 从Ubuntu软件中心安装Synaptic Package Manager。 (假设u的使用Ubuntu - 如果你不是,你可以使用apt-get或安装的软件包的其他方式)

从立得软件包管理器中,搜索以下软件包:

  • liblapack-dev的
  • libblas-dev

并安装。

安装香椿:混帐混帐克隆混帐克隆://github.com/edrosten/TooN。git 这将创建一个TooN目录,无论您将其克隆到哪里。导航到香椿目录,键入:

的./configure

使

使安装

希望这有助于。

+0

谢谢,@Ippler。 这很容易解决它。 – Devesh