未解决的外部符号__imp__Inf和__imp__Nan

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

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

谢谢


那么,你已经尝试过什么了吗?你有阅读文档吗?你有查看互联网吗?让我们不要犯同样的错误。 - Sebastian Mach
这个有帮助吗?http://developer.qt.nokia.com/wiki/Qt_Library_Cross_Dependencies - Stuart Golodetz
我已经在互联网上搜索了,但还没有找到有用的结果,这似乎是一种显而易见的错误或其他什么问题。我是一名Linux程序员,由于某些硬件问题被迫在Windows上编译此项目,因此很可能会错过一些显而易见的东西。 你知道,只有少数人知道那些显而易见的事情 ;) - Alno986
谢谢Stuart,但那些是Qt程序的依赖项,而不是Qt本身。我实际上正在尝试编译Qt。 - Alno986
1个回答

1
如果您使用的是Windows操作系统,我会假设您是在MSVS中构建程序。我经常在没有默认库文件的情况下开始项目,如果我偶然触及到其他库文件中的“超出范围”的内容,我会边开发边添加我需要的库文件。
幸运的是,MSVS非常擅长帮助我做到这一点。只需打开编译状态VERBOSE选项,查看它正在尝试访问的库文件,然后逐个添加即可: 右键单击项目,选择链接器,显示进度 -> 选择VERBOSE。
另一种方法是当我查看Microsoft函数时,检查它们声明所在的库文件并将其添加(因为VERBOSE选项会使我的输出窗口过载)。我不知道Qt是否有详细的参考文档(也说明了库文件),但值得一试。
当所有其他方法都失败时,只需添加Qt可能需要的所有库文件(确保禁用忽略标准库文件选项),然后检查VERBOSE选项,并仅保留列表中的那些库文件。
假设您在项目中拥有所有库文件,另一个问题是不匹配的依赖关系(右键单击解决方案,启动项目 -> 选择所需的项目,[项目依赖项 -> 映射指定库文件的每个依赖项])。
同时确保在导入外部文件时,在链接器-> 输入中定义了库文件。

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


感谢您的全面回复。 以详细模式运行链接器似乎不是一个好主意,因为我实际上不知道应该链接哪个库,所以以详细模式运行链接器也没有帮助。 好吧,我还是尝试了一下,但是没有帮助。 我尝试了您的第二个解决方案,但仍然没有成功;但是我不能将Qt与在我的PC上找到的所有库进行链接,我认为Qt在其默认配置中知道它需要什么。 正如我之前所说,我是一个Linux程序员,对Windows本地库不熟悉,因此我认为显然缺少某些东西。 - Alno986
VERBOSE 显示了每个库所需的函数,这可能是一个问题,因为您没有链接到它,很可能这就是它没有帮助您的原因。您尝试过构建 DEBUG vs RELEASE 吗?有些情况下一个有效而另一个无效。 您还说您修改了它以便为 CE 构建,因此可能缺少一些库...如果一切都失败了,请尝试获取最新的 Microsoft SDK...如果这仍然没有帮助,我很好奇:Nan 和 Inf 引用是在 Qt 中定义的还是在 Qt 框架之外的您自己的 lib\exe 中定义的? - TheNomad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接