1

我正在尝试构建 libCVD 以便与 ROS 一起使用(来自 www.ros.org)。我的问题是我收到以下错误:

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

还有一个 stackoverflow 问题几乎有类似的错误(编译 libcvd 时出现未定义的参考错误)。

我尝试了那里的建议,以找出为什么第二个 -L 选项没有给出路径。所以我最终进入了项目 configure.in 文件,我相信错误发生在该文件中。但我对这个构建系统没有经验,所以帮助会很大。

configure.in 文件位于https://dl.dropboxusercontent.com/u/16804463/configure.in

提前致谢。

4

2 回答 2

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。

无论如何,您绝对应该将此情况报告给该软件的维护人员,以便他们可以修复它:显然他们在这里遇到了一个真正的错误,因为很多人都遇到了它。

于 2013-04-18T11:35:50.973 回答
2

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

  • 拉帕克
  • 布拉斯
  • 香椿

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

从 Synaptic 包管理器中,搜索以下包:

  • liblapack-开发
  • libblas-dev

并安装。

安装 TooN : git clone git clone git://github.com/edrosten/TooN.git 这将在您克隆到的任何位置创建一个 TooN 目录。导航到 TooN 目录并输入:

。/配置

制作

进行安装

希望这可以帮助。

于 2014-01-29T13:34:00.237 回答