Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Ennesimo Linker error in C

    Salve ragazzi,
    so che è l'ennesima discussione aperta sul linker error, ma non riesco a risolvere il mio problema. Controllando tutti i thread nel forum, ho notato che questo :
    http://forum.html.it/forum/showthrea...t=Linker+error
    è quello che si avvicina di più alla mia situazione. Tuttavia vi allego codice ed errore:

    codice:
    #include <conio.h>
    #include <stdio.h> 
    
    #include <windows.h> 
    #include <mmsystem.h>
    
    int main(int argc, char** argv) {
       int ckey;           
       int notestate = 0; 
       int velocity = 100;
       int midiport;    
       int flag;          
       HMIDIOUT device;  
     
      
       union { unsigned long word; unsigned char data[4]; } message;
       message.data[0] = 0x90;
       message.data[1] = 60;   
       message.data[2] = 100;   
       message.data[3] = 0;   
    
       if (argc < 2) {
          midiport = 0;
       } else {
          midiport = atoi(argv[1]);
       }
       printf("MIDI output port set to %d.\n", midiport);
    system("pause");
    
       flag = midiOutOpen(&device, midiport, 0, 0, CALLBACK_NULL);
       if (flag != MMSYSERR_NOERROR) {
          printf("Error opening MIDI Output.\n");
          return 1;
       }
    
       printf("Press \"q\" to quit.\n");
       while (1) {      
          if (kbhit()) {  
             ckey = getch();
             if (notestate == 0) {
                message.data[2] = velocity;
                notestate = 1;
                printf("Note turned ON.\n");
             } else {
                // Note is currently on, turn off note.
                message.data[2] = 0;  
                notestate = 0;
                printf("Note turned OFF.\n");
             }
             flag = midiOutShortMsg(device, message.word);
             if (flag != MMSYSERR_NOERROR) {
                printf("Warning: MIDI Output is not open.\n");
             }
             if (ckey == 'q') break;
          }
       }
    
       midiOutReset(device);
    
       midiOutClose(device);
    
       return 0;
    }
    e gli errori che compaiono sono

    codice:
      [Linker error] undefined reference to `midiOutOpen@20' 
      [Linker error] undefined reference to `midiOutShortMsg@8' 
      [Linker error] undefined reference to `midiOutReset@4' 
      [Linker error] undefined reference to `midiOutClose@4' 
      ld returned 1 exit status
    Le cose che ho fatto, in base ai suggerimenti letti, sono le seguenti:
    - Ho creato un Progetto Windows Application
    - Ho aggiunto ad esso il mio file .c e libwinmm.a
    - Sono andato su Progetto->Opzioni del progetto->Files, ho selezionato libwinmm.a e ho spuntato Includi nella compilazione e Inlcudi nel link, ritrovandomi però un ultimo errore che mi ha convinto ad aprire questo thread:
    codice:
     C:\Documents and Settings\Luca\Desktop\prog\Makefile.win [Build Error]  [../../../../Dev-Cpp/lib/libwinmm.o] Error 255
    Come fare? ._.

    Uso il BloodShed Dev-C++ su Windows.

    Grazie 1000 a tutti

  2. #2
    Togli la spunta da "includi nella compilazione" e lascia quella di "includi nel link". Comunque non so se si faccia così a linkare le librerie in Dev-C++, mi pare che si vada invece nelle proprietà del progetto...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ho fatto come hai detto, ma stavolta l'errore è il seguente:

    codice:
    C:\......\Desktop\prova\Makefile.win [Build Error]  No rule to make target `../../../../Dev-Cpp/lib/libwinmm.o', needed by `ProvaMidi.exe'.  Stop.


    Grazie

  4. #4
    Togli libwinmm.o dal progetto e specificalo invece tra i file aggiuntivi da linkare nelle proprietà del progetto (non so in Dev-C++ esattamente come si faccia).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Non so dove sia libwinmm.o : dentro il progetto ho solo midi.c e libwinmm.h ._.
    Ho comunque provato a includere (Opzioni del progetto -> Files/Cartelle) le cartella Lib per le librerie, e la cartella Include per quella degli include. E l'errore rimane lo stesso.
    Uff.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.