неразрешенный внешний символ __imp__Inf и __imp__Nan - PullRequest
3 голосов
/ 22 декабря 2011

Я только что попытался собрать Qt для WinCE7.0, используя VS2008, после большого количества изменений кода я успешно скомпилировал основные библиотеки.

При компиляции библиотеки QtScript я получил следующие ошибки компоновщика:

1>Linking...
1>   Creating library ..\..\lib\QtScript4.lib and object ..\..\lib\QtScript4.exp
1>BytecodeGenerator.obj : error LNK2019: unresolved external symbol __imp__Inf referenced in function "public: static double __cdecl QTWTF::FloatHashTraits<double>::emptyValue(void)" (?emptyValue@?$FloatHashTraits@N@QTWTF@@SANXZ)
1>Executable.obj : error LNK2001: unresolved external symbol __imp__Inf
1>MathObject.obj : error LNK2001: unresolved external symbol __imp__Inf
1>DateMath.obj : error LNK2019: unresolved external symbol __imp__Nan referenced in function "double __cdecl QTWTF::parseDateFromNullTerminatedCharacters(char const *,bool &,int &)" (?parseDateFromNullTerminatedCharacters@QTWTF@@YANPBDAA_NAAH@Z)
1>JSValue.obj : error LNK2001: unresolved external symbol __imp__Nan
1>..\..\lib\QtScript4.dll : fatal error LNK1120: 2 unresolved externals

Я абсолютно не знаю, с какими библиотеками я не связался!

Спасибо

1 Ответ

1 голос
/ 26 декабря 2011

Если вы используете Windows, я предполагаю, что вы работаете в MSVS.Я часто начинаю проекты БЕЗ библиотек по умолчанию, и если мне случается прикасаться к «вне досягаемости» территория из другой библиотеки, я добавляю по мере необходимости то, что мне нужно.

К счастью, MSVS отлично помогает мне в этом.Просто включите статус компиляции VERBOSE и посмотрите, к каким библиотекам он пытается получить доступ, а затем просто добавьте их: щелкните правой кнопкой мыши проект, компоновщик, покажите прогресс -> выберите VERBOSE

Другой метод - когда я проверяю MSDN на наличие функций Microsoft и вижуlib, в котором они объявлены, и добавьте его (поскольку VERBOSE может быть излишним в моем плохом окне вывода).Я не знаю, есть ли у Qt подробная справочная документация (также с указанием библиотек), но стоит попробовать.

Когда все остальное терпит неудачу, просто добавьте все библиотеки, которые Qt может захотеть (убедитесь, что IGNORE STANDARD LIBSотключен), затем проверьте VERBOSE и оставьте только те в списке.

Если у вас есть все библиотеки в проекте, другая проблема - несовпадение зависимостей (щелкните правой кнопкой мыши решение, запустите проект -> выберите нужную,[зависимости проекта -> отобразить каждую зависимость для указанных библиотек).

Также убедитесь, что при импорте extern библиотека определяется в Linker-> Input.

Однако, если вы изменилиисточник (либо добавление новых функций / глобальных или статических переменных, либо изменение сигнатур функций), неразрешенная внешняя ссылка означает, что определение функции / переменной не имеет связанного тела.Либо реализуйте один, либо добавьте {} в определение;так что если это так, проверьте функции / переменные из сообщения об ошибке.

...