由于您添加了构建输出,现在答案很简单:您的链接器错误与 DevIL 完全无关。
您需要链接到SDL http://www.libsdl.org/(简单的 DirectMedia 层)。
由于 SDL 具有 C 接口,并且 - IIRC - 不要求 DLL 使用与应用程序相同的堆,因此VC8版本的《开发库》 http://www.libsdl.org/release/SDL-devel-1.2.14-VC8.zip应该没问题(即使你使用 VC10)。只需添加SDL.lib
到“附加依赖项”,你应该没问题。
EDIT
好的。
你要么
- 未链接所需的 .lib 文件(DevIL.lib 等)或
- 链接损坏/错误的 .lib 文件
至少我想不到其他的解释。
构建日志中提到的名称(__imp__ilInit@0
等)是正确的,当前的“DevIL SDK”(适用于 32 位 Windows 的 DevIL 1.7.8 SDK http://downloads.sourceforge.net/openil/DevIL-SDK-x86-1.7.8.zip)与 VC10 配合良好(我刚刚验证过)。
为了确保您链接到 DevIL.lib 等,请将以下内容放入您的 main.cpp 文件中:
#pragma comment(lib, "DevIL.lib")
#pragma comment(lib, "ILU.lib")
#pragma comment(lib, "ILUT.lib")
为了确保链接到这些文件的正确版本,请重新下载整个 SDK 并使用新文件重试。
EDIT 2
既然我得到了一半的奖励,我觉得我应该更有帮助:)
您可以尝试的最后一件事:启用详细链接器输出以检查链接器是否找到正确的版本DevIL.lib
。 (如果没有找到任何DevIL.lib
,你会得到一个错误LNK1104: cannot open file 'DevIL.lib'
- 由于您没有收到该消息,因此这不可能是问题所在。)
要启用详细链接器输出,请添加/VERBOSE
开关(在配置设置 -> 链接器 -> 命令行 -> 其他选项下)。
这会给你大量的消息。将它们复制到您最喜欢的编辑器中,然后搜索包含以下内容的行DevIL.lib
。其中一行应为Searching X:\path\to\DevIL.lib:
- 这是副本的路径DevIL.lib
链接器正在使用。如果这不是您从下载的 SDK 中复制文件的路径,则您已发现问题。
如果没有包含以下内容的行DevIL.lib
,那么链接器甚至不会尝试找到它。然而我从未见过#pragma comment
失败,所以如果你确实添加了这些行,那么几乎肯定不会出现这种情况。
顺便说一句:如果您设法解决了这个问题,请告诉我。这太奇怪了,我真的很想知道发生了什么事:)