3

经过大量代码修改后,我刚刚尝试使用 VS2008 为 WinCE7.0 构建 Qt,我成功编译了主库。

在编译 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

我完全不知道我错过了链接哪些库!

谢谢

4

1 回答 1

1

如果您使用的是 Windows,我会假设您是在 MSVS 中构建的。我经常在没有默认库的情况下启动项目,如果我碰巧从另一个库中触及“遥不可及”的领域,我会在进行过程中添加我需要的内容。

幸运的是,MSVS 很擅长帮助我解决这个问题。只需打开 VERBOSE 编译状态并查看它试图访问的库,然后添加它们:右键单击项目、链接器、显示进度 -> 选择 V​​ERBOSE

另一种方法是,当我检查 MSDN 中的 Microsoft 函数并查看它们声明的库并添加它时(因为 VERBOSE 在我糟糕的输出窗口中可能是过度杀伤力)。我不知道 Qt 是否有详细的参考文档(也说明了库),但值得一试。

当所有其他方法都失败时,只需添加 Qt 可能需要的所有库(确保禁用 IGNORE STANDARD LIBS)然后检查 VERBOSE 并仅将它们保留在列表中。

假设您拥有项目中的所有库,另一个问题是依赖项不匹配(右键单击解决方案,启动项目-> 选择您需要的,[项目依赖项-> 映射指定库的每个依赖项)。

还要确保当你导入外部库时,lib 是在 Linker->Input 中定义的。

但是,如果您修改了源(添加新函数/全局或静态变量或修改了函数签名),未解析的外部引用意味着函数/变量定义没有关联的主体。要么实现一个,要么在定义中添加 { };因此,如果是这种情况,请检查错误消息中的函数/变量。

于 2011-12-26T17:26:43.810 回答