Pregunta

  

Duplicar posible:
   ¿Qué es un indefinido referencia / sin resolver error de símbolo externo y cómo lo arreglo?

Estoy trabajando en envolver un gran número de .hy .lib archivos de C ++ nativo de C ++ administrada para su posible uso como una referencia .dll en C #.

Tengo los archivos .lib vinculados en y todo ha ido sin problemas hasta ahora. Al envolver el último archivo .h, me golpeó con un obstáculo cuando 2 funciones regresaron con el error enlace:

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 

he referenciado myutils.lib en las opciones del enlazador, lo que no debería ser el problema.

Lo extraño es que tengo cerca de 20 funciones en este archivo .h en particular y todos los demás están ligando muy bien a excepción de 3 funciones.

¿Alguna idea?

¿Fue útil?

Solución

El símbolo falta es __imp__htonl@4, que es un C ++ nombre mangled para htonl, que es una función que convierte un valor largo de un huésped a fin de red. El @ 4 se utiliza para destrozar los parámetros de entrada y es parte de apoyo C ++ para funciones sobrecargadas para permitir que el enlazador para resolver la función correcta w / o nombre de colisiones.

Asegúrese de que usted está vinculado a la biblioteca de red que se hace referencia a este símbolo de. Es de suponer que su paquete está utilizando una definición especial de este símbolo, en lugar de la macro que por lo general es.

Otros consejos

¿Está seguro las firmas coinciden? Asegúrese de comprobar para-dad firmado y const-dad. Además, asegúrese de funciones no están entre líneas.

Me encontré con este error cuando se compila contra una biblioteca y luego cambió la biblioteca antes de enlazar. Asegúrese de que sus cabeceras son los mismos proporcionados por la biblioteca (no copiado de otra arquitectura, etc.). Por supuesto, asegúrese de que está ligado con Ws2_32.lib (-lws2_32 para MinGW / gcc).

Además, si está utilizando GCC / MinGW es posible que desee echar un vistazo a esto: error enlazador MinGW: Winsock

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top