2013-04-18 87 views
1

我想建立libCVD爲了與ROS(從www.ros.org)使用。 我的問題是,我收到以下錯誤:libcvd - 未定義參考「×......」而編譯C++

make[3]: Entering directory `/opt/ros/groovy/stacks/tum_ardrone/thirdparty/libcvd/build' 
/usr/bin/g++-4.6 -o progs/cvd_display_image progs/cvd_display_image.o -L. -lcvd -ltiff -ljpeg -lpng -lpng -llapack -lGLU -lGL -lrt -L -lX11 -lXext -pthread 

./libcvd.so: undefined reference to `XMoveWindow' 
./libcvd.so: undefined reference to `XCreateGlyphCursor' 
./libcvd.so: undefined reference to `XStoreName' 
./libcvd.so: undefined reference to `XLookupString' 
./libcvd.so: undefined reference to `XFreeFont' 
./libcvd.so: undefined reference to `XSetClassHint' 
./libcvd.so: undefined reference to `XCreateWindow' 
./libcvd.so: undefined reference to `XCreateColormap' 
./libcvd.so: undefined reference to `XOpenDisplay' 
./libcvd.so: undefined reference to `XDestroyWindow' 
./libcvd.so: undefined reference to `XCloseDisplay' 
./libcvd.so: undefined reference to `XUnmapWindow' 
./libcvd.so: undefined reference to `XNextEvent' 
./libcvd.so: undefined reference to `XSetWMProtocols' 
./libcvd.so: undefined reference to `XResizeWindow' 
./libcvd.so: undefined reference to `XMapWindow' 
./libcvd.so: undefined reference to `XSelectInput' 
./libcvd.so: undefined reference to `XFlush' 
./libcvd.so: undefined reference to `XWarpPointer' 
./libcvd.so: undefined reference to `XLoadQueryFont' 
./libcvd.so: undefined reference to `XDefineCursor' 
./libcvd.so: undefined reference to `XInternAtom' 
./libcvd.so: undefined reference to `XQueryPointer' 
./libcvd.so: undefined reference to `XUndefineCursor' 
./libcvd.so: undefined reference to `XGetWindowAttributes' 
./libcvd.so: undefined reference to `XPending' 
collect2: ld returned 1 exit status 
make[3]: *** [progs/cvd_display_image] Error 1 
make[3]: Leaving directory `/opt/ros/groovy/stacks/tum_ardrone/thirdparty/libcvd/build' 
make[2]: *** [libcvd_built] Error 2 

有近類似的錯誤(undefined reference error while compiling libcvd)的計算器等問題。

我試圖像它暗示有找出爲什麼沒有與第二-L選項指定的路徑。所以我結束了項目configure.in文件,我相信錯誤發生。 但我沒有這個構建系統的經驗,所以幫助會很好。

configure.in文件正在https://dl.dropboxusercontent.com/u/16804463/configure.in

由於可提前。

回答

2

在其他SO問題所選擇的解決方案是不正確的。正確的解決方案是未選擇的解決方案:錯誤是您的鏈接行中缺少路徑。您的鏈接包含:-L -lX11。在-L之後應該有一個路徑名。由於沒有,鏈接器假定路徑名是下一個參數,-lX11。這意味着鏈接器不鏈接實際的libX11.so庫,因爲它將庫引用視爲路徑。

您需要查看您的Makefile並找到鏈接cvd_display_image.o目標的規則,並查看此處發生了什麼。正如在另一個SO答案中提到的,很可能你會發現鏈接線類似於-L$(SOME_VARIABLE),並且該變量爲空。您需要將該變量設置爲某個值,可能通過運行make SOME_VARIABLE=.make SOME_VARIABLE=/usr/lib或其他任何值。

眼看configure.in文件也不是那麼有用:重要的部分是makefile文件。

在任何情況下,你一定要報告給該軟件的維護人員,使他們能夠解決這個問題:很明顯,他們有一個真正的錯誤這裏多人正在運行到它。

2

我有類似的錯誤。 我意識到libcvd似乎依賴於以下3個庫。

  • LAPACK
  • BLAS
  • 香椿

這些都是數學庫。 從Ubuntu軟件中心安裝Synaptic Package Manager。 (假設u的使用Ubuntu - 如果你不是,你可以使用apt-get或安裝的軟件包的其他方式)

從立得軟件包管理器中,搜索以下軟件包:

  • liblapack-dev的
  • libblas-dev

並安裝。

安裝香椿:混帳混帳克隆混帳克隆://github.com/edrosten/TooN。git 這將創建一個TooN目錄,無論您將其克隆到哪裏。導航到香椿目錄,鍵入:

的./configure

使

使安裝

希望這有助於。

+0

謝謝,@Ippler。 這很容易解決它。 – Devesh