这是一个相当新鲜的香草 Win7 64 位安装和最新的 MinGW64,在一个干净的(新提取的)GLFW 2.7.5 源目录中调用他们的make win32-msys命令。
[A] 构建库
#1 -- gcc -c -I 处的警告。-I.. -Wall -mwin32 -O2 -o win32_init.o win32_init.c:
win32_init.c: In function '_glfwPlatformTerminate':
win32_init.c:353:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
#2 -- gcc -c -I 处的警告。-I.. -Wall -mwin32 -O2 -mdll -DGLFW_BUILD_DLL -D_GLFW_NO_DLOAD_GDI32 -D_GLFW_NO_DLOAD_WINMM -o win32_init_dll.o win32_init.c:
win32_init.c: In function '_glfwPlatformTerminate':
win32_init.c:353:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
但相关的输出文件确实在 .\lib\win32 中创建:glfw.dll、libglfwdll.a 和 libglfw.a。但是我担心这些可能已损坏,因为我以后不可能通过 gcc 链接到它们——与本文中最后一个问题相同的问题进一步描述。
[B] 构建示例
#3 -- 在 triangle.exe、pong3d.exe、splitview.exe、mipmaps.exe、gears.exe、boing.exe、wave.exe、heightmap.exe 处发出警告:
c:/mingw64/x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _mainCRTStartup; defaulting to 0000000000401000
但是对于构建良好的 listmodes.exe、mthello.exe、mtbench.exe 和particles.exe 而言并非如此。事实上,这 4 个是唯一在此之后正常运行的,其他的只是立即退出而没有输出或错误(自然,因为它们没有有效的入口点)。
[C] 构建测试
在 accuracy.exe、dynamic.exe 处发出警告:
c:/mingw64/x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _mainCRTStartup; defaulting to 0000000000401000
defaults.exe 没有这样的问题。对于 dynamic.exe,它会继续出现以下错误:
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x1c): undefined reference to `__imp_glfwGetVersion'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x62): undefined reference to `__imp_glfwInit'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0xcf): undefined reference to `__imp_glfwOpenWindow'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x10b): undefined reference to `__imp_glfwSetWindowTitle'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x118): undefined reference to `__imp_glfwSetWindowSizeCallback'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x123): undefined reference to `__imp_glfwSwapInterval'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x14a): undefined reference to `__imp_glfwGetWindowParam'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x151): undefined reference to `__imp_glfwSwapBuffers'
C:\Users\roxor\AppData\Local\Temp\cc8hsorn.o:dynamic.c:(.text.startup+0x174): undefined reference to `__imp_glfwTerminate'
collect2: ld returned 1 exit status
make[1]: *** [dynamic.exe] Error 1
make[1]: Leaving directory `/c/glfw64/tests'
make: *** [win32-msys] Error 2
现在后一个是加载DLL的测试程序。您可能认为这只是在正确的位置缺少必要的库(.a 和 .dll),但请注意此时我确实拥有所有必要的包含和库(来自早期的 GLFW 制作,与以上,相同的版本,相同的警告,相同的输出文件)在正确的地方:
- \MinGW64\x86_64-w64-mingw32\lib 中的 libglfwdll.a(在 libglu32.a、libopengl32.a 旁边)
- \MinGW64\x86_64-w64-mingw32\include\GL 中的 glfw.h(gl.h、glaux.h、glu.h 旁边)
- \windows 和 \windows\system32 中的 glfw.dll(在 opengl32.dll、glu32.dll 旁边)