2015-01-12 26 views
-1

我最近重新安裝了linux(mint 17),當我建立並運行我的項目時,它抱怨未能加載swrast。我想我必須安裝ATI驅動程序和它確實解決了該問題:我現在有ATI propietary驅動重命名libGL.so

Graphics: Card: Advanced Micro Devices [AMD/ATI] Oland XT [Radeon HD 8670/R7 250] bus- ID: 01:00.0 
X.Org: 1.15.1 driver: fglrx Resolution: [email protected] 
GLX Renderer: AMD Radeon R7 200 Series GLX Version: 4.4.13283 - CPC 14.501.1003 Direct Rendering: Yes 

問題是,我不能構建項目了,因爲化妝找不到libGL.so

No rule to make target `/usr/lib/x86_64-linux-gnu/libGL.so 

一看,有似乎是一個重命名的版本,我不知道發生了什麼事......

/usr/lib/FGL.renamed.libGL.so.1.2 
/usr/lib/libGL.so 
/usr/lib/libGL.so.1 
/usr/lib/libGL.so.1.2 
/usr/lib/fglrx/fglrx-libGL.so.1.2 
/usr/lib/i386-linux-gnu/libGL.so 
/usr/lib/i386-linux-gnu/libGL.so.1 
/usr/lib/i386-linux-gnu/libGL.so.1.2 
/usr/lib/i386-linux-gnu/fglrx/fglrx-libGL.so.1.2 
/usr/lib/i386-linux-gnu/mesa/FGL.renamed.libGL.so.1.2.0 
/usr/lib/x86_64-linux-gnu/mesa/FGL.renamed.libGL.so.1.2.0 

我想我必須創造一些聯繫,但我不知道哪一個。我過去做過,它搞砸了安裝。

+2

爲什麼不能只使用'/ usr/lib/libGL.so'?當您請求'-lGL'時,鏈接器是標準名稱。 – keltar

+0

我該怎麼做?我自己不包括它,glfw是。它不應該只使用標準的嗎? –

+3

'沒有規則做目標'意味着你的makefile完全取決於那個文件。嚴格地說,你不應該依賴任何.so,在動態庫改變之後重建程序是不好的主意;檢查你的makefile並刪除這個依賴。 – keltar

回答

0

得到它的工作。我意識到netbeans在我安裝ati驅動程序後並沒有真正重新生成我的make文件,我認爲它試圖從舊位置提取依賴關係。當然,司機仍然會做一些時髦的事情,但至少我認爲他們創建了自己的符號鏈接。我刪除了該項目並重新導入它,它現在就應該如此。

2

一看,有似乎是一個重命名的版本,我不知道發生了什麼事......

libGL.so是GPU驅動程序的一部分(實際上它包含了整個OpenGL實現)。這與Windows不同,其中opengl32.dll爲驅動程序提供掛鉤。從技術上講,最好在Linux中有這種掛鉤機制,但不幸的是我們不這樣做。

爲了緩解這種情況,Linux發行版的軟件包管理器通常會將驅動程序的libGL.so安裝到獨立的目錄中,並在/usr/lib/中爲其創建符號鏈接。專有驅動程序的二進制軟件包由於某些原因未被髮行版的軟件包管理器安裝,因此不遵循該約定,只是在此結構中暴露無遺。老實說,在這期間實現鉤子機制會更容易,而不是創建這些符號鏈接的工具。

+0

完全同意你的看法。謝謝回答。 –