johnc Temat założony przez niniejszego użytkownika |
Dev-C++ - błąd linkera ( [Linker error] main.o:main.cpp:(.text+0x1d6): undefined reference to `midiInGetNumDevs@0' » 2019-05-03 19:28:52 W moim programie WINAPI postanowiłem użyć funkcje obsługi MIDI. Dla przykładu: int mn = midiInGetNumDevs();
Jeżeli program kompiluję jako plik c++, to nie otrzymuję żadnych błędów i program działa. Jeżeli go kompiluję jako projekt, to linker wywala: [Linker error] main.o:main.cpp:(.text+0x1d6): undefined reference to `midiInGetNumDevs@0' Zachowuje się jakby mu brakowało ciała funkcji, ale przecież ja nie tworzę tego ciała tylko korzystam z "dobrodziejstwa" Microsoftu. Być może trzeba w w pliku *.rc jakoś zdeklarować te funkcje, ale nie wiem jak. Proszę o pomoc, bo trochę przeryłem internet, ale rozwiązania nie znalazłem. |
|
nanoant20 |
» 2019-05-03 20:04:18 |
|
johnc Temat założony przez niniejszego użytkownika |
» 2019-05-03 23:30:25 Mój program jest już strasznie kobylasty, więc żeby skupić się tylko na opisywanym problemie wygenerowałem w DEVie nowy projekt, który zawiera podstawy do tworzenia okna i po funkcji "CreateWindowEx" dopisałem odwołanie do funkcji MIDI "midiInGetNumDevs()". Jak otwieram i kompiluję plik jako plik źródłowy, to wszystko jest OK, natomiast jeżeli tą samą treść umieszczę w projekcie DEV to mi się pluje o tą funkcję. #include <windows.h>
LRESULT CALLBACK WndProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam ) { switch( Message ) { case WM_DESTROY: { PostQuitMessage( 0 ); break; } default: return DefWindowProc( hwnd, Message, wParam, lParam ); } return 0; }
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wc; HWND hwnd; MSG msg; memset( & wc, 0, sizeof( wc ) ); wc.cbSize = sizeof( WNDCLASSEX ); wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszClassName = "WindowClass"; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK ); return 0; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, "WindowClass", "Caption", WS_VISIBLE | WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL ); if( hwnd == NULL ) { MessageBox( NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK ); return 0; } int mn = midiInGetNumDevs(); while( GetMessage( & msg, NULL, 0, 0 ) > 0 ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } return msg.wParam; }
|
|
pekfos |
» 2019-05-03 23:48:54 Musisz dodać bibliotekę winmm do linkera. Dodaj opcję linkera -lwinmm. |
|
nanoant20 |
» 2019-05-03 23:49:46 zobacz #include biblioteki githab |
|
johnc Temat założony przez niniejszego użytkownika |
» 2019-05-04 00:26:09 No pekfos - naprawdę ekspert. Szacun. Jedyne co było potrzebne to właśnie "-lwinmm" w linkerze. Ja to miałem, ale w kompilatorze.
Bardzo dziękuję! |
|
« 1 » |