Domanda

  

Eventuali duplicati:
   Che cosa è un non definito di riferimento / non risolto errore simbolo esterno e come posso risolvere il problema?

Sto lavorando ad avvolgere un gran numero di .he .lib file da C ++ nativo di Managed C ++ per l'uso eventuale come riferimento DLL in C #.

Ho i file .lib collegati in e tutto sta andando liscio finora. Su avvolgendo il file .h tardi, mi ha colpito un intoppo quando 2 funzioni è tornato con l'errore link:

error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function
"public: void __thiscall Field::setCharacter(unsigned char,int)"
(?setCharacter@Field@@QAEXEH@Z) myutils.lib 

Ho fatto riferimento myutils.lib nelle opzioni di linker, in modo che non dovrebbe essere il problema.

Cosa c'è di strano è che ho circa 20 funzioni in questo particolare file .h e tutto il resto sta collegando bene tranne che per 3 funzioni.

Tutte le idee?

È stato utile?

Soluzione

Il simbolo mancante è __imp__htonl@4, che è un C ++ nome alterato per htonl, che è una funzione che converte un valore long dall'host all'ordine rete. Il @ 4 è usato per manipolare i parametri di input ed è parte del sostegno C ++ per funzioni sovraccaricate per consentire al linker di risolvere la funzione giusta w / o nome collisioni.

Assicurarsi che si sono collegati alla libreria di rete che si fa riferimento a questo simbolo da. Presumibilmente il pacchetto sta usando qualche particolare definizione di questo simbolo, al posto della macro che di solito è.

Altri suggerimenti

Sei sicuro che la partita firme? Assicuratevi di controllare per la firma-ness e const-ness. Inoltre, assicurarsi che funzioni non sono inline.

mi sono imbattuto in questo errore quando ho compilato contro una biblioteca e poi cambiato la libreria prima che collega. Assicurarsi che le intestazioni sono gli stessi forniti dalla tua libreria (non copiato da un'altra architettura, ecc). Naturalmente, assicurarsi che si sta collegando contro ws2_32.lib (-lws2_32 per mingw / gcc).

Inoltre, se si utilizza GCC / mingw si consiglia di dare un'occhiata a questo: errore del linker MinGW: Winsock

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top