2013-01-22 34 views
1

編輯:
後多一點挖我發現,我有一個libGL.so在/usr/lib/i386-linux-gnu/libGL.so,如果我提出這個離開然後重新正確連接工程。在查看錯誤行一段時間後,我認爲消息中libGL.so的完整路徑是可疑的,因爲它一直在尋找多個位置來找到它,通常它只顯示庫的名稱,而不是一個特定的完整路徑。所以現在的問題是;爲什麼找到其他版本會導致搜索停止並顯示令人困惑的錯誤消息? (我是i386ness以某種方式使它不兼容)。/usr/lib中似乎不是默認的鏈接位置

ORIG:
出於某種原因,我無法將libGL.so鏈接到我的應用程序中。這個問題似乎是,當試圖找到它時,ld(或者這個例子中的黃金)沒有在/ usr/lib目錄中找到它(它從我能找到的所有東西都是默認位置之一),而是看上去有點怪異的位置,例如

/usr/bin/ld: error: cannot open /usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/libGL.so: No such file or directory

現在/usr/lib/libGL.so肯定存在,我如果我做一個明確的-L的/ usr /在正確的makefile文件鏈接的一切LIB。

我想知道有人知道這裏發生了什麼嗎?

信息:
Ubuntu Linux操作系統的x86 12.10
克++ 4.7
GNU金接頭
CPU的AMD Phenom 2 5233
UNAME -m出:i686的

編輯: 輸出鏈路與-v參數:

Using built-in specs. 
COLLECT_GCC=g++ 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.7/lto-wrapper 
Target: i686-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.2-2ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu 
Thread model: posix 
gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) 
COMPILER_PATH=/usr/lib/gcc/i686-linux-gnu/4.7/:/usr/lib/gcc/i686-linux-gnu/4.7/:/usr/lib/gcc/i686-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.7/:/usr/lib/gcc/i686-linux-gnu/ 
LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.7/:/usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.7/../../../../lib/:/lib/i386-linux-gnu/:/lib/../lib/:/usr/lib/i386-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/i686-linux-gnu/4.7/../../../:/lib/:/usr/lib/ 
COLLECT_GCC_OPTIONS='-o' 'application' '-v' '-L/home/user/src/tutorials/application/builds/./vendor/ogre3d/./lib' '-shared-libgcc' '-mtune=generic' '-march=i686' 
/usr/lib/gcc/i686-linux-gnu/4.7/collect2 --sysroot=/ --build-id --no-add-needed --as-needed --eh-frame-hdr -m elf_i386 --hash-style=gnu -dynamic-linker /lib/ld-linux.so.2 -z relro -o application /usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/crt1.o /usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/crti.o /usr/lib/gcc/i686-linux-gnu/4.7/crtbegin.o -L/home/user/src/tutorials/application/builds/./vendor/ogre3d/./lib -L/usr/lib/gcc/i686-linux-gnu/4.7 -L/usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu -L/usr/lib/gcc/i686-linux-gnu/4.7/../../../../lib -L/lib/i386-linux-gnu -L/lib/../lib -L/usr/lib/i386-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/i686-linux-gnu/4.7/../../.. /home/user/src/tutorials/application/builds/./src/most_basic_main.o /home/user/src/tutorials/application/builds/./src/QOgreWidget.o /home/user/src/tutorials/application/builds/./src/QtOgreApplication.o /home/user/src/tutorials/application/builds/./src/qt_gen/QtOgreApplication.moc.o /home/user/src/tutorials/application/builds/./src/qt_gen/QOgreWidget.moc.o -lpthread -lQtCore -lQtNetwork -lQtGui -lQtOpenGL -lRenderSystem_GLStatic -lOgreMainStatic -ldl -lfreetype -lXrandr -lGL -lGLU -lxcb -lX11 -lXext -lXpm -lXaw7 -lXt -lzzip -lfreeimage -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/i686-linux-gnu/4.7/crtend.o /usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/crtn.o 
/usr/bin/ld: error: cannot open /usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/libGL.so: No such file or directory 
+0

顯示您鏈接的命令行?如果你添加-v,它的消息? –

+0

什麼是CPU架構? x86還是x86-64?你可以通過運行'uname -m'來檢查。 – IneQuation

+0

更新的主要描述與詳細信息 – radman

回答

1

經過一堆挖掘後,事實證明我是一個懸掛符號鏈接(它基本上是一個符號鏈接,沒有鏈接到有效的東西)的受害者。所以發生了什麼事情是鏈接器發現libGL.so/usr/lib/i386-linux-gnu/libGL.so,並決定它的搜索結束了,但是當它試圖獲取文件時,在符號鏈接的末尾沒有任何東西導致我看到的錯誤消息。一旦我刪除了懸掛符號鏈接,搜索沒有找到libGL.so,直到找到正確的版本/usr/lib/libGL.so,此時一切正常。

0

好像你的圖書館路徑沒有因爲某種原因而被設置。你的配置是否可以設置--libexecdir =/usr/lib。我在--libexecdir這個選項丟失的地方遇到了類似的問題。

您可以通過在生成文件中傳遞LDFLAGS來修復它。如何在makefile中使用LDFLAGS被刪除here。 您使用-L/usr/lib的選項也很完美。

+1

嗨,我知道-L將是一種解決方法。我真的很想知道爲什麼/ usr/lib默認沒有被搜索到,我使用makefile生成工具,並且向所有makefile添加多餘的-L並不是我想要的那種解決方案。 – radman

+0

@radman對不起,誤解你的問題。看到你的編輯後,我有點困惑自己。哈哈!!! – spanky

+0

不要擔心隊友,謝謝你試圖幫助。 – radman