Неразрешенный Внешний символ [дубликат]
-
18-09-2019 - |
Вопрос
Возможный Дубликат:
Что такое ошибка неопределенной ссылки / неразрешенного внешнего символа и как мне ее исправить?
Я работаю над переносом большого количества файлов .h и .lib с родного C ++ на управляемый C ++ для возможного использования в качестве ссылочной .dll в C #.
У меня есть .файлы библиотеки связаны, и до сих пор все шло гладко.После переноса последнего файла .h я столкнулся с проблемой, когда 2 функции вернулись с ошибкой ссылки:
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
Я ссылался myutils.lib
в параметрах компоновщика, так что это не должно быть проблемой.
Что странно, так это то, что у меня есть около 20 функций в этом конкретном файле .h, а все остальные связываются просто отлично, за исключением 3 функций.
Есть какие-нибудь идеи?
Решение
Отсутствующий символ - это __imp__htonl@4
, которое представляет собой искаженное C ++ имя htonl, представляющее собой функцию, преобразующую длинное значение из host в network order.@4 используется для изменения входных параметров и является частью поддержки C ++ перегруженных функций, чтобы позволить компоновщику разрешить правильную функцию без коллизий имен.
Убедитесь, что вы связаны с сетевой библиотекой, из которой вы ссылаетесь на этот символ.Предположительно, ваш пакет использует какое-то специальное определение этого символа вместо макроса, которым он обычно является.
Другие советы
Вы уверены, что подписи совпадают?Обязательно проверьте наличие подписи и постоянства.Кроме того, убедитесь, что функции не встроены.
Я столкнулся с этой ошибкой, когда компилировался с библиотекой, а затем изменил библиотеку перед связыванием.Убедитесь, что ваши заголовки совпадают с теми, что предоставлены вашей библиотекой (не скопированы из другой архитектуры и т.д.).Конечно, убедитесь, что вы ссылаетесь на ws2_32.lib (-lws2_32 для mingw / gcc).
Кроме того, если вы используете GCC / mingw, вы можете захотеть взглянуть на это: Ошибка компоновщика MinGW:винсок