[英]GCC, linking libraries, not found?
編譯HelloWorld.c有效; 但是當我嘗試添加一些外部庫時,它會窒息。
我將.a和.dll文件添加到我的'Libraries'中; 將兩者的路徑添加到PATH和庫路徑。 我還放了包含文件並配置了Include。 據說我擁有的圖書館與win / mingw兼容。 他們也為MSVC提供了不同的下載功能。
令人沮喪。 ld.exe提供完整路徑,顯然在那里,我有權讀/寫它們。 我也沒有路徑包含它們(它們在庫路徑和路徑中)。
我不明白為什么這不起作用。
c:/ mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe:找不到-lC:\\ rhino \\ data \\ lib \\ glfw.dll c:/ mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe:找不到-lC: \\ rhino \\ data \\ lib \\ libglfwdll.ac:/ mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe:不能find -lC:\\ rhino \\ data \\ lib \\ libglfw.a
C:\Users\rhino>dir C:\rhino\data\lib\libglfw.a
04/15/2011 05:24 PM 70,384 libglfw.a
更新:
我甚至將它們添加到我的C:\\ MinGW \\ lib路徑中,它仍然無法找到它們。
Michael Burr指出了在命令行上引用庫的正確方法。 使用-L
開關給出了庫的路徑,使用-l
開關給出了庫的名稱(庫的名稱是文件名,開頭沒有lib
部分, .a
是.a
后綴。結束)。
還有一點要指出的是,您正在嘗試鏈接到庫的靜態(libglfw.a)和動態(glfw.dll)版本,這兩個版本都同時包含在下載中。 相反,你應該根據你的需要選擇一個,並且只鏈接到那個。
鏈接靜態版本很簡單。 只需將-lglfw
添加到命令行即可。
要使用動態庫,您應該使用-lglfwdll
開關鏈接到dll( libglfwdll.a
)的導入庫,並從link命令中省略dll本身。 基本上,導入庫不包含任何對象代碼,只包含定義; 實際的代碼在dll中。 該DLL將在運行時動態鏈接。 (為此,系統必須能夠找到dll;即它必須位於當前工作目錄中,位於路徑中的目錄中,或者必須將其目錄添加到使用的特殊環境變量中對於這件事;但為了使這變得重要,你首先必須成功構建可執行文件。)
我的經驗(不包括如何在Eclipse中配置)是ld
(gcc將調用)希望lib名稱沒有lib
前綴或.a
擴展名。 嘗試:
gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw -lglfwdll
我不確定glfw.dll
文件是否應該列為庫; 該DLL的導入庫(我假設是libglfwdll.lib)應該負責鏈接到DLL。
嘗試這個:
gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.