簡體   English   中英

GCC,鏈接庫,找不到?

[英]GCC, linking libraries, not found?

  • 操作系統:Windows 7 Pro X64
  • IDE:面向C / C ++開發人員的Eclipse IDE
  • 編譯器:MinGW(最新,4.5.2)

編譯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM