【发布时间】:2020-12-14 13:57:42
【问题描述】:
所以,基本上我要问的是,如果 GNU GCC 编译器仅将“.a”文件识别为库文件,我之所以问这个问题是因为,我在我的 codeblocks cpp 项目中链接了 3 个库文件,两个的库文件具有“.a”扩展名,最后一个具有“.lib”扩展名。当我尝试构建项目时,这是我得到的错误:
-------------- Build: Debug in OpenGl_GLFW (compiler: GNU GCC Compiler)---------------
g++.exe -Wall -g -Idependencies\include -Idependencies\include
-IC:\Users\Mubarak\Documents\Programming\Cpp\OpenGl_GLFW\dependencies\include -c C:\Users\Mubarak\Documents\Programming\Cpp\OpenGl_GLFW\dependencies\lib\glew32s.lib -o obj\Debug\dependencies\lib\glew32s.o
g++.exe -Ldependencies\lib -Ldependencies\lib -LC:\Users\Mubarak\Documents\Programming\Cpp\OpenGl_GLFW\dependencies\lib -o bin\Debug\OpenGl_GLFW.exe obj\Debug\dependencies\lib\glew32s.o dependencies\lib\libglfw3.a dependencies\lib\libglfw3dll.a obj\Debug\src\main.o -lopengl32.a dependencies\lib\glew32s.lib dependencies\lib\libglfw3.a -lopengl32.a dependencies\lib\glew32s.lib dependencies\lib\libglfw3.a
g++.exe: warning: C:\Users\Mubarak\Documents\Programming\Cpp\OpenGl_GLFW\dependencies\lib\glew32s.lib:
linker input file unused because linking not done
g++.exe: error: obj\Debug\dependencies\lib\glew32s.o: No such file or directory
Process terminated with status 1 (0 minute(s), 0 second(s)) 1
error(s), 1 warning(s) (0 minute(s), 0 second(s))
所以看起来 .lib 库文件有问题,我开始在 Visual Studio 社区编程,在那里,.lib 文件工作......所以我开始了解“如果同一编译器负责创建库文件,则库文件仅适用于特定编译器”我只是想确定这一点。
如果是这样,为什么不同的编译器会生成具有不同扩展名的库文件? 而且,不同的编译器编译不同吗?不同的编译器会产生不同的机器码吗?
【问题讨论】:
-
我认为你遗漏了重要的部分:error: obj\Debug\dependencies\lib\glew32s.o: No such file or directory,所以看看为什么 glew32s.o缺席。
-
没有源文件可以构建到目标文件中。因此,链接时没有要使用的目标文件。你认为提供
...\lib\glew32s.lib作为源输入会做什么? -
第一个 g++ 命令应该做什么?没有输入,它会写入一个名为
glew32s.o的文件,这也没有意义。 -
@AProgrammer 是的,该文件不存在,问题是我有一个 .lib 文件,我尝试使用 g++.exe 编译 .lib 文件,它失败了,编译需要 .cpp 或 . c 文件。
-
@Someprogrammerdude idk,你有什么想说的吗?我所知道的是 .lib 文件是已经从源代码编译的库文件,所以我不明白为什么我需要另一个源文件。
标签: c++ opengl gcc codeblocks glew