0

我正在尝试编译 libcvd 以使用 PTAM。当我在编译时到达命令“make”时,它给了我以下错误:

ln -s libcvd.so.0.7 libcvd.so.0
ln -s libcvd.so.0 libcvd.so
g++ -o progs/se3_exp progs/se3_exp.o -L.  -lcvd  -ltiff -ljpeg -lpng -llapack -lGLU -lGL -ldc1394  -L -lX11 -lXext -pthread
./libcvd.so: error: undefined reference to 'XQueryPointer'
./libcvd.so: error: undefined reference to 'XPending'
./libcvd.so: error: undefined reference to 'XNextEvent'
./libcvd.so: error: undefined reference to 'XFlush'
./libcvd.so: error: undefined reference to 'XSelectInput'
./libcvd.so: error: undefined reference to 'XStoreName'
./libcvd.so: error: undefined reference to 'XUnmapWindow'
./libcvd.so: error: undefined reference to 'XDestroyWindow'
./libcvd.so: error: undefined reference to 'XCloseDisplay'
./libcvd.so: error: undefined reference to 'XOpenDisplay'
./libcvd.so: error: undefined reference to 'XCreateColormap'
./libcvd.so: error: undefined reference to 'XCreateWindow'
./libcvd.so: error: undefined reference to 'XMapWindow'
./libcvd.so: error: undefined reference to 'XDefineCursor'
./libcvd.so: error: undefined reference to 'XUndefineCursor'
./libcvd.so: error: undefined reference to 'XWarpPointer'
./libcvd.so: error: undefined reference to 'XMoveWindow'
./libcvd.so: error: undefined reference to 'XResizeWindow'
./libcvd.so: error: undefined reference to 'XGetWindowAttributes'
./libcvd.so: error: undefined reference to 'XSetClassHint'
./libcvd.so: error: undefined reference to 'XInternAtom'
./libcvd.so: error: undefined reference to 'XSetWMProtocols'
./libcvd.so: error: undefined reference to 'XLoadQueryFont'
./libcvd.so: error: undefined reference to 'XCreateGlyphCursor'
./libcvd.so: error: undefined reference to 'XFreeFont'
./libcvd.so: error: undefined reference to 'XLookupString'
collect2: ld returned 1 exit status
make: *** [progs/se3_exp] Error 1

我找不到任何合适的解决方案来解决这个错误。

谢谢你的帮助。

4

3 回答 3

1

我做了两件事。

首先,我在以下位置添加了一个额外的 -lX11。新线看起来像这样 -

thirdparty/libcvd/installfiles/configure:  LIBS="-lX11 -lX11 $LIBS"
thirdparty/libcvd/installfiles/configure:       LIBS="$LIBS -L$x_libraries -lX11 -lX11 -lXext"
thirdparty/libcvd/installfiles/configure.in:        APPEND(LIBS, [-L$x_libraries -lX11 -lX11 -lXext])

接下来,我按照这个答案安装了下面提到的所有 3 个(注意:您还需要安装 liblapack-dev。我刚刚安装了 liblapack3,但也需要 dev)。 https://stackoverflow.com/a/21432657/771650

于 2014-03-27T11:21:15.620 回答
1

我找到了解决方案,

在 makefile 中,按以下顺序更改库引用的顺序:

LOADLIBES = -lX11 -ltiff -ljpeg -lpng -llapack -lGLU -lGL -ldc1394  -L -lXext -pthread
于 2013-02-18T15:36:09.010 回答
0

你的问题在这里:

g++ -o progs/se3_exp progs/se3_exp.o -L。-lcvd [...] -ldc1394 -L -lX11 -lXext -pthread

与第一个不同-L.,第二个库路径 (-L) 选项后面没有路径参数,因此它会窃取接下来用作(不太可能!)路径的任何内容。要真正解决这个问题,您需要查看 Makefile 的LOADLIBES定义并弄清楚这个不完整-L 的选项是如何进入其中的。最有可能的是,Makefile 有 ... -L$(SOME_PATH)... 或类似的,并且SOME_PATH变量意外为空。

于 2013-02-18T16:34:42.743 回答