Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - errore: LNK2019
Forum - C/C++ - errore: LNK2019

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 16:27
Lunedì, 21/01/2013
Ciao a tutti!
Ho un problema con il linker di Visual Studio 2012:

file main.c
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pcap.h>
  4.  
  5. #include "type.h"
  6.  
  7. void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
  8. {
  9.         printf("grab packet %d\n", header->len);
  10. }
  11.  
  12. int main(int argc, char *argv[]) {
  13.  
  14.         pcap_if_t *alldevs;
  15.         pcap_if_t *d;
  16.  
  17.         pcap_t *handle;
  18.  
  19.         int a = hello();
  20.  
  21.         tobj t = type_tobj_new();
  22.  
  23.         if (pcap_findalldevs(&alldevs, t->errbuf) == -1)
  24.         {
  25.                 fprintf(stderr, "unable to find interfaces\n");
  26.                 exit(1);
  27.         }
  28.  
  29.         t->dev = alldevs;
  30.  
  31.         for(d = alldevs; d; d = d->next)
  32.         {
  33.                 printf("%s\n", d->description);
  34.         }
  35.  
  36.  
  37.         handle = pcap_open_live(t->dev->name, 65536, 1, 1000, t->errbuf);
  38.  
  39.         pcap_loop(handle, 0, packet_handler, NULL);
  40.  
  41.         system("PAUSE");
  42.  
  43.         return 0;
  44. }



file: type.h
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pcap.h>
  4.  
  5. typedef struct _tobj
  6. {
  7.         pcap_if_t *dev;
  8.         pcap_t *handle;
  9.         char *errbuf;
  10. } *tobj;
  11.  
  12. //typedef struct _tobj * tobj;
  13.  
  14. tobj type_tobj_new();
  15.  
  16. int hello();



file type.c:
Codice sorgente - presumibilmente C++

  1. #include "type.h"
  2.  
  3. int hello()
  4. {
  5.         printf("hello \n");
  6.         return 0;
  7. }
  8.  
  9. tobj type_new_tobj()
  10. {
  11.         tobj t = (tobj) malloc(sizeof(tobj));
  12.         if (t == NULL)
  13.         {
  14.                 fprintf(stderr, "Unable to alloc tobj memory\n");
  15.                 exit(1);
  16.         }
  17.  
  18.         return t;
  19. }



e l'errore che mi restituisce è il seguente:
Codice sorgente - presumibilmente C/C++

  1. main.obj : error LNK2019: riferimento al simbolo esterno _type_tobj_new non risolto nella funzione _main



il problema è che è da poco che uso VS per programmare in C, prima avevo sempre utilizzato Code::Blocks, Netbeans e altri... quindi penso che sia io a configurare male il linker?
Anche perchè le pcap le trova, la funzione hello() la linka senza problemi invece type_tobj_new() non l trova....
tuttavia il file "type.obj" viene generato quindi non capisco come mai salta l'errore??

c'è qualche definizione particolare del compilatore microsoft che mi manca, o altro?

ciao grazie :k:

Ultima modifica effettuata da tasx il 21/01/2013 alle 16:28
PM Quote
Avatar
Dante.cpp (Normal User)
Pro


Messaggi: 65
Iscritto: 23/11/2011

Segnala al moderatore
Postato alle 16:36
Lunedì, 21/01/2013
Effettui la chiamata cosi:
Codice sorgente - presumibilmente Plain Text

  1. type_tobj_new();



Ma la funzione è definita cosi:
Codice sorgente - presumibilmente Plain Text

  1. typej_new_tob(){
  2.  
  3. //code
  4. }


Ultima modifica effettuata da Dante.cpp il 21/01/2013 alle 16:37
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 16:41
Lunedì, 21/01/2013
:rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl::rotfl:

e pensare che sono due giorni che navigo su google cercando dappertutto.... che imbecille.....

grazie mille.....

pensavo che VS queste cose le segnalasse....

ancora grazie ;)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:01
Lunedì, 21/01/2013
Testo quotato

Postato originariamente da tasx:
pensavo che VS queste cose le segnalasse....



Veramente le segnala !

riferimento al simbolo esterno _type_tobj_new non risolto nella funzione _main


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 13:54
Martedì, 22/01/2013
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da tasx:
pensavo che VS queste cose le segnalasse....



Veramente le segnala !

riferimento al simbolo esterno _type_tobj_new non risolto nella funzione _main



si ma quello è l'errore del linker, io pensavo mi sottolineasse la funzione nell'editor....

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:59
Martedì, 22/01/2013
Testo quotato

Postato originariamente da tasx:

si ma quello è l'errore del linker, io pensavo mi sottolineasse la funzione nell'editor....



L'editor non può indicarti un errore del genere, se ci pensi un momento ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 18:02
Martedì, 22/01/2013
uhm.... non potrebbe dirmi: "guarda che di questa funzione non ho l'implementazione ma solo la definizione...." :-?:-?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:05
Martedì, 22/01/2013
Testo quotato

Postato originariamente da tasx:

uhm.... non potrebbe dirmi: "guarda che di questa funzione non ho l'implementazione ma solo la definizione...." :-?:-?



Potresti averla in un altro modulo o in una libreria esterna ed è compito del linker "collegare" tutti gli elementi dai vari moduli per ottenere un solo eseguibile. Non a caso l'errore te lo indica il linker, proprio perché non riesce a trovare quella funzione in nessun modulo o libreria.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 20:52
Martedì, 22/01/2013
però perchè sia in un altro modulo/libreria non dovrei dichiararla come "extern" o sbaglio?

ps: perdonami se rompo ma solo interesse.... ;) :) :)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo