我真的更喜歡GLFW而不是Glut,并且想要在Go 1.0.1 64位的Windows 64位環(huán)境下使用它的Golang綁定。在Linux下,綁定可以完美地工作。這在原則上是可行的Windows下- GitHub的用戶家校會(huì)設(shè)法來做到這一點(diǎn),但他是在Win32和他的提示沒有解決我的問題呢。但是,我確實(shí)基于tdm64-gcc-4.6.1設(shè)置了完整且干凈的Mingw64?,F(xiàn)在這是一件奇怪的事情-使freeglut綁定在64位Windows,64位Go 1.0.1下可以工作-glfw綁定對我來說失敗了。我想弄清楚為什么,因?yàn)樗鼈儽举|(zhì)上都使用相同的cgo功能和技術(shù)。注意,我目前有一個(gè)自制的,半熟但基本上可以正常工作的替換軟件包,該軟件包使用LoadLibrary / GetProcAddress調(diào)用在Go中公開glfw.dll。這行得通,但我認(rèn)為硬連接的內(nèi)置CGO綁定比無數(shù)Syscall(),Syscall6(),Syscall9(),Syscall12()等Go func調(diào)用更為可取。如果Win32和Linux gophers可以擁有此功能,為什么我們不Win64呢?到目前為止,這是我的設(shè)置:我有一個(gè)帶有三個(gè)補(bǔ)丁的Golang版本,以使lib鏈接在應(yīng)用cgo時(shí)起作用我已經(jīng)使用MinGW64成功地將最新的freeglut和GLFW庫編譯為64位DLL。頭文件glut.h,freeglut * .h和glfw.h放在\ MinGW64 \ x86_64-w64-mingw32 \ include \ GL中(在gl.h,gloux.h,glu.h之后)庫文件libfreeglut.a和libglfwdll.a放在\ MinGW64 \ x86_64-w64-mingw32 \ lib(libglu32.a,libopengl32.a旁邊)中64位dll glfw.dll和freeglut64.dll放在\ windows和\ windows \ system32中(opengl32.dll,glu32.dll旁邊)我相信freeglut64.dll和glfw.dll都可以工作-至少在安裝DLL之后,它們的大多數(shù)示例程序都可以運(yùn)行。一切都應(yīng)該準(zhǔn)備就緒,對不對?現(xiàn)在首先要進(jìn)行成功綁定(我不需要),freeglut-當(dāng)我進(jìn)入-x github.com/zombiezen/Go-GLUT/glut時(shí),一切都構(gòu)建良好,我可以成功創(chuàng)建一個(gè)glut窗口,在從.go源文件編譯的Windows test.exe中顯示一個(gè)三角形。感謝-x,go get演示了它的構(gòu)建過程:是的,這是一個(gè)很麻煩的工作-但實(shí)際上始終是相同的錯(cuò)誤,并且在構(gòu)建過程中相當(dāng)晚。請注意,如果未定義#define GLFW_DLL,除沒有__imp_前綴外,我得到的輸出基本上是相同的-靜態(tài)鏈接既不鼓勵(lì)使用Go,也不適合此特定用例?,F(xiàn)在,當(dāng)gcc抱怨“未定義的引用”時(shí),根據(jù)我在Google上的搜索,可能有多種原因...找不到DLL不會(huì)失敗-它們位于適當(dāng)?shù)奈恢?,對于freeglut64.dll,它可以正常工作找不到.a庫肯定是成功的-它們在適當(dāng)?shù)奈恢?,并且libfreeglut.a可以工作,如果我將-lglfwdll更改為-lblafoobar,則gcc會(huì)更早地失敗并正確地抱怨“找不到blafoobar”-因此它確實(shí)找到了libglfwdll.a。庫依賴關(guān)系的順序?我嘗試將-lglfwdll作為第一個(gè)庫(在-lglu32 -lopengl32之前)和最后一個(gè)庫(在這兩個(gè)之后),沒有區(qū)別。Golang glfw綁定有問題嗎?別這么認(rèn)為,它適用于其他人,包括適用于chsc的Windows(32位)TL; DR -在Windows 64位,圍棋1.0.1 64位完全修補(bǔ),CGO成功生成的東西飼料到GCC的兩個(gè)freeglut和GLFW。然后,GCC高興地吃掉了那些東西來建立freeglut綁定,但是拒絕了它來建立glfw綁定,所有C.funcs()都帶有“未定義的引用”。libfreeglut和libglfwdll均已正確構(gòu)建并安裝為64位DLL,并且.h / .a libs均已正確定位??赡苁鞘裁丛??
3 回答

滄海一幻覺
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
我可以想到兩種可能性:
這些符號(hào)實(shí)際上不在庫中。您可以使用進(jìn)行檢查
nm
。確保符號(hào)類型是大寫字母;如果只有小寫代碼,則庫構(gòu)建不正確。您有循環(huán)依賴關(guān)系。即,庫A依賴于庫B,而庫B又依賴于A。您可以解決此問題,第二次將庫添加到命令中,或使用鏈接器組(請參閱參考資料
ld --help
)。
請注意,命令行上的庫順序非常重要:鏈接器按照它們出現(xiàn)的順序依次讀取每個(gè)庫,搜索當(dāng)時(shí)所需的符號(hào),然后繼續(xù)。如果符號(hào)是由較晚的庫首先引用的,則鏈接器將不會(huì)重新訪問較早的庫以查找定義。這就是循環(huán)依賴成為問題的原因。
- 3 回答
- 0 關(guān)注
- 425 瀏覽
添加回答
舉報(bào)
0/150
提交
取消