我正在尝试从GLFW的文档中编译一个示例。
我的库和源文件的文件夹结构是:
C:\ CPP \
glfw3.dll glfw3dll.a libglfw3.a test.cpp
包括\
GLFW \
glfw3.h glfw3native.h
#include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
我正在尝试使用此命令编译它
c:\cpp>x86_64-w64-mingw32-g++ -lglfw3 -Iinclude test.cpp -o test
但是我收到了这个错误:
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lglfw3 collect2.exe: error: ld returned 1 exit status
-v输出:
Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-g++
COLLECT_LTO_WRAPPER=c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-ming
w32/4.7.2/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-4.7.2-mingw/configure --host=x86_64-w64-mingw32 --build=
x86_64-unknown-linux-gnu --target=x86_64-w64-mingw32 --prefix=/home/gfortran/gcc
-home/binary/mingw32/native/x86_64/gcc/4.7.2 --with-sysroot=/home/gfortran/gcc-h
ome/binary/mingw32/cross/x86_64/gcc/4.7.2 --with-gcc --with-gnu-ld --with-gnu-as
--with-gmp=/home/gfortran/gcc-home/binary/mingw32/native/x86_64/gmp --with-mpfr
=/home/gfortran/gcc-home/binary/mingw32/native/x86_64/mpfr --with-mpc=/home/gfor
tran/gcc-home/binary/mingw32/native/x86_64/mpc --with-cloog=/home/gfortran/gcc-h
ome/binary/mingw32/native/x86_64/cloog --with-ppl=/home/gfortran/gcc-home/binary
/mingw32/native/x86_64/ppl --with-host-libstdcxx='-lstdc++ -lsupc++ -lm' --enabl
e-cloog-backend=ppl --enable-targets=i686-w64-mingw32,x86_64-w64-mingw32 --enabl
e-lto --enable-languages=c,c++,fortran --enable-libgomp --enable-threads=win32 -
-enable-static --enable-shared=lto-plugin --enable-plugins --enable-ld=yes --ena
ble-libquadmath --enable-libquadmath-support --disable-nls --disable-tls --disab
le-win32-registry
Thread model: win32
gcc version 4.7.2 (GCC)
COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march
=x86-64'
c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4.7.2/cc1plus.e
xe -quiet -v -I include -iprefix c:\users\username\gcc\bin\../lib/gcc/x86_64
-w64-mingw32/4.7.2/ -U_REENTRANT test.cpp -quiet -dumpbase test.cpp -mtune=gener
ic -march=x86-64 -auxbase test -version -o C:\Users\username~1.ADM\AppData\Local\T
emp\ccfe85gV.s
GNU C++ (GCC) version 4.7.2 (x86_64-w64-mingw32)
compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.0.0,
MPC version 0.9
warning: GMP header version 5.0.5 differs from library version 5.0.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8
6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2"
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8
6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/x86_64-w64-mingw32"
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8
6_64-w64-mingw32/4.7.2/../../../../include/c++/4.7.2/backward"
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8
6_64-w64-mingw32/4.7.2/include"
ignoring nonexistent directory "/home/gfortran/gcc-home/binary/mingw32/cross/x86
_64/gcc/4.7.2/home/gfortran/gcc-home/binary/mingw32/native/x86_64/gcc/4.7.2/lib/
gcc/x86_64-w64-mingw32/4.7.2/../../../../include"
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8
6_64-w64-mingw32/4.7.2/include-fixed"
ignoring duplicate directory "c:/users/username/gcc/lib/gcc/../../lib/gcc/x8
6_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/include"
ignoring nonexistent directory "/home/gfortran/gcc-home/binary/mingw32/cross/x86
_64/gcc/4.7.2/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
include
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i
nclude/c++/4.7.2
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i
nclude/c++/4.7.2/x86_64-w64-mingw32
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../i
nclude/c++/4.7.2/backward
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/include
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/include-fixed
c:\users\username\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x
86_64-w64-mingw32/include
End of search list.
GNU C++ (GCC) version 4.7.2 (x86_64-w64-mingw32)
compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.0.0,
MPC version 0.9
warning: GMP header version 5.0.5 differs from library version 5.0.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 0b3cd9e378660c38a8a80567400ff92f
COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march
=x86-64'
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x
86_64-w64-mingw32/bin/as.exe -v -I include -o C:\Users\username~1.ADM\AppData\Loca
l\Temp\ccQqklHV.o C:\Users\username~1.ADM\AppData\Local\Temp\ccfe85gV.s
GNU assembler version 2.22.52 (x86_64-w64-mingw32) using BFD version (GNU Binuti
ls) 2.22.52.20120723
COMPILER_PATH=c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4.
7.2/;c:/users/username/gcc/bin/../libexec/gcc/;c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/bin/
EQ_LIBRARY_PATH=c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.
2/;c:/users/username/gcc/bin/../lib/gcc/;C:/Users/username/gcc/x86_64-w6
4-mingw32/lib/../lib/;c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw3
2/4.7.2/../../../../x86_64-w64-mingw32/lib/../lib/;c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/;C:/Users/username/gcc/
x86_64-w64-mingw32/lib/;c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-ming
w32/4.7.2/../../../../x86_64-w64-mingw32/lib/;c:/users/username/gcc/bin/../l
ib/gcc/x86_64-w64-mingw32/4.7.2/../../../
COLLECT_GCC_OPTIONS='-I' 'include' '-o' 'test.exe' '-v' '-mtune=generic' '-march
=x86-64'
c:/users/username/gcc/bin/../libexec/gcc/x86_64-w64-mingw32/4.7.2/collect2.
exe --sysroot=/home/gfortran/gcc-home/binary/mingw32/cross/x86_64/gcc/4.7.2 -m i
386pep -Bdynamic -o test.exe C:/Users/username/gcc/x86_64-w64-mingw32/lib/..
/lib/crt2.o C:/Users/username/gcc/x86_64-w64-mingw32/lib/../lib/crtbegin.o -
Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2 -Lc:/users/
username/gcc/bin/../lib/gcc -LC:/Users/username/gcc/x86_64-w64-mingw32/lib
/../lib -Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../.
./../../x86_64-w64-mingw32/lib/../lib -Lc:/users/username/gcc/bin/../lib/gcc
/x86_64-w64-mingw32/4.7.2/../../../../lib -LC:/Users/username/gcc/x86_64-w64
-mingw32/lib -Lc:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2
/../../../../x86_64-w64-mingw32/lib -Lc:/users/username/gcc/bin/../lib/gcc/x
86_64-w64-mingw32/4.7.2/../../.. C:\Users\username~1.ADM\AppData\Local\Temp\ccQqkl
HV.o -lglfw3 -lstdc++ -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -
lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt C:/Us
ers/username/gcc/x86_64-w64-mingw32/lib/../lib/crtend.o
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/libglfw3.a when searching f
or -lglfw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/glfw3.dll when searching fo
r -lglfw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib\libglfw3.a when searching f
or -lglfw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../libglfw3.a when searching for -lgl
fw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../glfw3.dll when searching for -lglf
w3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../..\libglfw3.a when searching for -lgl
fw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/libglfw3.a when searching f
or -lglfw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../lib/glfw3.dll when searching fo
r -lglfw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../libglfw3.a when searching for -lgl
fw3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/users/username/gcc/bin
/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../glfw3.dll when searching for -lglf
w3
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: cannot find -lglfw3
collect2.exe: error: ld returned 1 exit status
c:\ cpp&gt; x86_64-w64-mingw32-g ++ -Iinclude test.cpp -o test。\ glfw3.dll
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `.\glfw3.dll' is in
compatible with i386:x86-64 output
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0xe): undefi
ned reference to `glfwInit'
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x43): undef
ined reference to `glfwCreateWindow'
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x53): undef
ined reference to `glfwTerminate'
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x66): undef
ined reference to `glfwMakeContextCurrent'
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x74): undef
ined reference to `glfwSwapBuffers'
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x79): undef
ined reference to `glfwPollEvents'
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x85): undef
ined reference to `glfwWindowShouldClose'
C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o:test.cpp:(.text+0x93): undef
ined reference to `glfwTerminate'
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: C:\Users\username~1.ADM\AppData\Local\Temp\cceVroaP.o
: bad reloc address 0x0 in section `.pdata'
c:/users/username/gcc/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x8
6_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
答案 0 :(得分:3)
命令行中显示的库的顺序对于gcc以及要查看的库搜索路径很重要。尝试将-lglfw3
移动到最后并使用{将当前目录添加到搜索路径{1}}。
例如
-L
编辑1:从查看详细状态输出看,您所拥有的g++ -Iinclude test.cpp -o test.exe -L . -lglfw3
与您正在使用的mingw gcc不兼容。幸运的是,libglfw3.a
链接器可以直接使用dll文件。看看以下是否有效:
ld
替代方法是使用您拥有的mingw gcc从g++ -Iinclude test.cpp -o test.exe .\glfw3.dll
创建导入库。由于您需要创建一个glfw3.dll
文件,然后调用dlltool,因此需要更多参与。
Edit2:您正在使用的mingw gcc是一个64位的Windows编译器。确保您使用的是正确的glfw3 64位库,并且不是 32位版本。的 GLFW download section 强>
答案 1 :(得分:0)
我认为你有一个命名问题。看来Mingw32编译器正在寻找库文件glfw3.dll,glfw3.a和glfw3.h。问题是您的库文件名为libglfw3.a。现在你需要将它重命名为glfw3.a,以便它可以找到它。如果仍然无效,则需要将glfw3dll.a重命名为glfw3.dll.a