我正在尝试编译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
我找不到任何适当的解决方案来解决此错误。
感谢您的帮助。
答案 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
变量意外地为空。