Frage

  

Mögliche Duplizieren:
   Was ein nicht definiert ist Referenz / nicht aufgelöstes externes Symbol Fehler und wie kann ich es beheben?

Ich arbeite eine große Anzahl von .h und LIB-Dateien aus nativen C ++ Managed C ++ für eine eventuelle Verwendung als ein in C # referenzierten DLL auf gewickelt wird.

Ich habe die LIB-verknüpften Dateien in, alles läuft problemlos so weit ist. Nach der neuesten .h-Datei Einwickeln, schlug ich einen Haken, wenn zwei Funktionen wieder mit dem Link-Fehler kamen:

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 

Ich habe myutils.lib in den Linker-Optionen Bezug genommen wird, so dass nicht das Problem sein soll.

Was seltsam ist, dass ich über 20 Funktionen in dieser speziellen H-Datei habe und die gesamten Rest verknüpft nur in Ordnung, außer für drei Funktionen.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Das fehlende Symbol ist __imp__htonl@4, die ein C ++ verstümmelten Namen für htonl sind, die eine Funktion ist, die einen langen Wert von Host umwandelt, um zu vernetzen. Die @ 4 wird verwendet, um die Eingangsparameter zerfleischen und ist ein Teil von C ++ Unterstützung für überladene Funktionen der Linker zu ermöglichen, die richtige Funktion w / o Namenskollisionen zu lösen.

Stellen Sie sicher, dass Sie mit dem Netzwerk-Bibliothek verknüpft sind, dass Sie dieses Symbol aus referenzieren. Vermutlich Ihr Paket eine spezielle Definition dieses Symbols, wobei anstelle des MACRO, dass es in der Regel ist.

Andere Tipps

Sind Sie sicher, dass die Signaturen übereinstimmen? Achten Sie darauf, für signierte Heit und const-ness zu überprüfen. Stellen Sie außerdem sicher, dass Funktionen nicht inlined.

Ich lief in diesen Fehler, wenn ich gegen eine Bibliothek zusammengestellt und verändert dann die Bibliothek vor verknüpfen. Stellen Sie sicher, dass Ihre Header die gleiche, die von Ihrer Bibliothek zur Verfügung gestellt werden (nicht von einer anderen Architektur kopiert, etc). Natürlich stellen Sie sicher gegen ws2_32.lib sind Verknüpfung (-lws2_32 für mingw / gcc).

Außerdem, wenn Sie GCC verwenden / mingw Sie vielleicht einen Blick auf diese nehmen wollen:

scroll top