[英]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.