gcc链接WinMM.Lib问题
程序代码:
//实例来源:圣经64页 //实例功能: //运行结果描述: #include <windows.h> #pragma comment (lib,"WinMM.Lib") //没啥反应呢,也不知道加载成功了还是失败了 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ static TCHAR szAppName[]=TEXT("HelloWin"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style=CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=szAppName; if (!RegisterClass(&wndclass)){ MessageBox(NULL,TEXT("Windows NT"), szAppName,MB_ICONERROR); return 0; } hwnd=CreateWindow(szAppName, //窗口类名称 TEXT("Window Caption"), //窗口标题 WS_OVERLAPPEDWINDOW, //窗口样式 CW_USEDEFAULT, //初始左上角X坐标 CW_USEDEFAULT, //初始左上角Y坐标 CW_USEDEFAULT, //窗口初始宽度 CW_USEDEFAULT, //窗口初始高度 NULL, //父窗口句柄 NULL, //窗口菜单句柄 hInstance, //实例句柄 NULL); //窗口创建时的参数 ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ HDC hdc; PAINTSTRUCT ps; RECT rect; switch (message){ case WM_CREATE: PlaySound(TEXT("hellowin.wav"),NULL,SND_FILENAME|SND_ASYNC); //有这个GCC编译不通过 return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); DrawText(hdc, TEXT("Welcom Windows API!"), -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wParam,lParam); }
以上代码,在VS2008里可以编译运行,因为链接了winmm.lib,但我想用GCC编译试试,出现错误:
C:\Users\ADMINI~1\AppData\Local\Temp\ccdU3oZZ.o:test.c:(.text+0x7f): undefined reference to `__imp_GetStockObject'
C:\Users\ADMINI~1\AppData\Local\Temp\ccdU3oZZ.o:test.c:(.text+0x20a): undefined reference to `__imp_PlaySoundA'
collect2.exe: error: ld returned 1 exit status
找到另一本书里有个语句,可以链接时指定的做法。
程序代码:
//实例来源:《精通Windows API 范文庆、周彬彬、安靖著》16页 //实例功能:HelloWindowsAPI //运行结果描述:加入了链接时指定User32.lib,需要保存为936代码页 #include <windows.h> //链接时使用User32.lib //我的注释:这句好像没起作用吧?都没指定到底链接哪个版本的User32.lib #pragma comment (lib,"User32.lib") //试了一下,果然有它没它都可以编译运行 int WinMain( //与圣经和一般网上实例不同,没使用WINAPI那几个字 HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, //与圣经不同处,圣经是PSTR,这里是LPSTR int nCmdShow){ MessageBox(NULL,TEXT("开始学习Windows API编程"),TEXT("消息对话框"),MB_OK); return 0; //与圣经不同,但与我的实际环境相同,return首字母不能大写 }
我搜索了C盘,User32.lib有四个,有x86、x64还有IA64的。第二个代码那句,链接的是哪个呢?
换成我的问题,要怎么在我第一段程序中,链接上x64位的WinMM.lib呢
还在百度上找到一种说法,在命令链接时加上参数-Iwinmm
https://zhidao.baidu.com/question/2117602199340331187.html
这种方法是不是要把winmm.lib拷贝到msys2相关的文件夹里面啊?
[此贴子已经被作者于2019-4-9 13:07编辑过]