今天编译一个简单的图形程序,编译时报错
gcc test.c
undefined reference to `__imp_Ellipse'
collect2.exe: error: ld returned 1 exit status
在提示下想到需要用到windows自带的gdi32full.dll文件
想着我用的mingw64编出的是64位的程序
于是去 C:\Windows\SysWOW64 目录下找到 gdi32full.dll
gcc test.c C:/Windows/SysWOW64/gdi32full.dll
然后编译报
collect2.exe: error: ld returned 5 exit status
然后在这里卡了很久
各种探索尝试后发现把文件换成 C:\Windows\System32 文件夹里面的 gdi32full.dll
gcc test.c C:/Windows/System32/gdi32full.dll
就能编译成功了,运行也没问题
那么问题来了,为什么明明是64位的程序,却要用到32位所需的dll才能编译成功呢?
搜索之下找到了这篇文章,大概就是讲因为windows历史遗留问题
System32 文件夹下面放的是64位程序的dll,而SysWOW64文件夹下面放的则是32位所需的dll
很低级的失误,留个纪念