编译libcvd时未定义的引用错误

时间:2013-02-18 15:01:38

标签: c++ reference makefile

我正在尝试编译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

我找不到任何适当的解决方案来解决此错误。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我找到了解决方案,

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

LOADLIBES = -lX11 -ltiff -ljpeg -lpng -llapack -lGLU -lGL -ldc1394  -L -lXext -pthread

答案 1 :(得分: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

答案 2 :(得分: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变量意外地为空。