Reference 奇怪的g++;链接行为取决于参数顺序

Reference 奇怪的g++;链接行为取决于参数顺序,reference,g++,undefined,msys,Reference,G++,Undefined,Msys,我试图用g++在msys上编译一个简单的opengl程序。令我惊讶的是,链接器抱怨未定义的引用: $ g++ -mwindows -lopengl32 glut_md2.cpp C:\Users\...\cceQtYAy.o:glut_md2.cpp:(.text+0x67a): undefined reference to `glGenTextures@8' C:\Users\...\cceQtYAy.o:glut_md2.cpp:(.text+0x696): undefined refere

我试图用g++在msys上编译一个简单的opengl程序。令我惊讶的是,链接器抱怨未定义的引用:

$ g++ -mwindows -lopengl32 glut_md2.cpp
C:\Users\...\cceQtYAy.o:glut_md2.cpp:(.text+0x67a): undefined reference to `glGenTextures@8'
C:\Users\...\cceQtYAy.o:glut_md2.cpp:(.text+0x696): undefined reference to `glBindTexture@8'
....
在谷歌搜索了一段时间后,我发现问题的顺序是g++参数:

$ g++ glut_md2.cpp -mwindows -lopengl32
--- all ok! ---
有趣的是,g++中正确的参数顺序在第一个示例中。即:

$ g++ --help
Usage: g++.exe [options] file...
....

我错过什么了吗?为什么在文件参数之后移动选项会使编译成功?我在linux上本机编译时从来没有遇到过这个问题…

我曾经遇到过一两次这个问题,您应该将-L和-L放在命令行的末尾。g++不链接,它调用ld并传递参数,ld man:

链接器将只在存档所在的位置搜索存档一次 在命令行上指定。如果存档定义了一个符号 在档案之前出现的某个对象中未定义 在命令行上,链接器将包含相应的文件 从档案中。但是,对象中出现的未定义符号 稍后,命令行将不会导致链接器搜索 再次存档

ld-o/lib/crt0.o hello.o-lc


奇怪。我认为g++应该以任何一种方式将链接选项传递给链接器,因为在上面的示例中它非常明确。伏都教魔法。。。