2013-02-18 114 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