2011-04-15 106 views
2
  • 操作系统:Windows 7临X64
  • IDE:Eclipse IDE中的C/C++开发
  • 编译器:MinGW的(最新的,4.5.2)

编译HelloWorld.c工程;但是当我尝试添加一些外部库时,它会窒息。GCC,链接库,找不到?

我将.a和.dll文件添加到我的“库”中;将两者的路径添加到PATH和库路径。我还放入了包含文件并配置了包含。据说我拥有的图书馆与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.a c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32 /斌/ ld.exe:找不到-lC:\犀牛\ 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文件路径和它仍然无法找到它们。

+1

确保已将库添加到Eclipse的库路径中。 – 2011-04-15 22:48:50

+0

-L“C:\ rhino \ data \ libs”-L“C:\ rhino \ data \ lib” – user697111 2011-04-15 23:06:51

+0

什么是'ld'命令行? – 2011-04-15 23:16:31

回答

5

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

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

与静态版本的链接很简单。只需在命令行中添加-lglfw即可。

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

0

试试这个:

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

C:\ rhino \ EProjects \ TestC \ Debug> gcc -LC:\ MinGW \ lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a gcc:libglfw.a:没有这样的文件或目录 gcc:libglfwdll.a:没有这样的文件或目录 C:\ rhino \ EProjects \ TestC \ Debug> gcc -LC:\ MinGW \ lib -oTestC.exe TestC。 ø-lglfw libglfw libglfwdll GCC:libglfw:没有这样的文件或目录 GCC:libglfwdll:没有这样的文件或目录 C:\犀牛\ EProjects \ TESTC \调试> GCC -LC:\ MinGW的\ lib中-oTestC.exe TestC.o -lglfw -llibglfw.a libglfwdll.a gcc:libglfwdll.a:没有这样的文件或目录 – user697111 2011-04-16 00:10:35

+0

C:\ rhino \ EProjects \ TestC \ Debug> gcc -LC:\ MinGW \ lib -oTestC.exe TestC.o -lglfw -llibglfw.a -llibglfwdll.a c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:找不到-llibglfw.a c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:找不到-llibglfwdll.a collect2:ld返回1出口状态 – user697111 2011-04-16 00:12:01

+0

c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:can not finC:\ rhino \ EProjects \ TestC \ Debug> gcc -LC:\ MinGW \ lib -oTestC.exe TestC.o -lglfw -llibglfw -llibglfwdll c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../。 ./../../mingw32/bin/ld.exe:找不到-llibglfw c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../ ../mingw32/bin/ld.exe:找不到-llibglfwdll collect2:ld返回1退出状态-llibglfw.a c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld .exe:找不到-llibglfwdll collect2:ld返回1退出状态 – user697111 2011-04-16 00:12:33

4

我的经验(不包括这会如何在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。

+0

您可以链接到最新版本的GCC中的dll。您需要将DLL路径添加到'-L'选项。 – rubenvb 2011-04-16 11:17:56

+0

@rubenvb:有趣 - 我不知道。现在的问题是:为什么MSVC的链接器没有让你这样做,而且这么长时间? – 2011-04-16 17:52:11

+0

好吧,你可以通过'LoadLibrary'和相关的混乱。至于过了多久,我不知道它是什么时候实施的,但似乎在2007年之前/之前通过旧的论坛帖子寻找...... – rubenvb 2011-04-16 20:26:27