GCC,链接库,找不到?

时间:2011-04-15 22:46:20

标签: c gcc mingw

  • 操作系统: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 \数据\ lib中\ glfw.dll c:/ mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe:找不到-lC:\ rhino \ data \ LIB \ libglfwdll.a c:/ mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe:找不到-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路径中,它仍然无法找到它们。

3 个答案:

答案 0 :(得分:8)

Michael Burr指出了在命令行上引用库的正确方法。使用-L开关给出了库的路径,以及带有-l开关的库的名称(库的名称是文件名,没有lib部分开头,最后是.a后缀。

还有一点要指出的是,您正在尝试链接到库的静态(libglfw.a)和动态(glfw.dll)版本,这两个版本都包含在下载中,同时时间。相反,你应该根据你的需要选择一个,并且只链接到那个。

链接静态版本很简单。只需将-lglfw添加到命令行。

要使用动态库,您应该使用libglfwdll.a开关链接到dll(-lglfwdll)的导入库,并从link命令中省略dll本身。基本上,导入库不包含任何对象代码,只包含定义;实际的代码在dll中。该DLL将在运行时动态链接。 (为此,系统必须能够找到dll;即它必须位于当前工作目录中,位于路径中的目录中,或者必须将其目录添加到使用的特殊环境变量中对于这件事;但为了使这变得重要,你首先必须成功构建可执行文件。)

答案 1 :(得分:4)

我的经验(不包括如何在Eclipse中配置)是ld(gcc将调用)想要没有lib前缀的lib名称或{{1} } 延期。尝试:

.a

我不确定gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw -lglfwdll 文件是否应该列为库;该DLL的导入库(我假设是libglfwdll.lib)应该负责链接到DLL。

答案 2 :(得分:0)

试试这个:

gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a