2013-02-18 76 views
0

我想编译libcvd以使用PTAM。当我到了“make”命令在编译时它给了我以下错误:编译libcvd时未定义的引用错误

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 

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

谢谢你的帮助。

回答

1

我找到了解决办法,

在生成文件更改顺序的库引用的顺序:

LOADLIBES = -lX11 -ltiff -ljpeg -lpng -llapack -lGLU -lGL -ldc1394 -L -lXext -pthread 
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变量意外地为空。

1

我做了两件事。

首先,我在以下地方添加了一个额外的-XX11。新线看起来是这样 -

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

相关问题