首先,我有三个 .lib 文件,我认为我已经正确地将它们导入到 VS2010 中,并且已将平台配置为 64x。还有与 .lib 文件相对应的 .dll 文件。包含声明这些错误函数的 .h 文件看起来像是:
ILAPI void ILAPIENTRY ilDeleteImage(const ILuint Num);
很遗憾,我猜测该定义是在.dll文件中定义的,而我没有编写这个文件,所以我不确定。但由于这是之前可以工作的代码,我认为我之所以会出现这个错误是因为连接器找不到定义,而不是 def / decl 不匹配的原因。
当我悬停在ILAPI上时,它显示:“ILAPI __declspec(dllimport)” 我目前的猜测是程序导入.lib文件,.lib文件使用.dll文件获取函数的定义。我相信我正在导入.lib文件,因为编译器不再告诉我找不到特定的.lib文件。然而,我担心它可能没有连接到.dll文件。我有些不确定。我已经打开了.lib文件,.lib文件包含给出错误的函数名称。我还使用了dependency walker程序查看我的DLL文件,它一直在给我以下错误:
错误:由于隐式依赖模块中缺少导出函数,至少一个模块具有未解决的导入。
错误:发现不同CPU类型的模块。
基于其他人的评论,我觉得我可以忽略第二个错误。但是我不确定第一个错误。我也不确定那是否是问题的根本原因。可以是也可以不是。
我还使用VS cmd和dependency walker查看了.lib文件的内部,似乎无法找到的函数名称在其中一个.lib和.dll中列出。
在配置方面,我正在运行发布模式x64平台。 我在proj->prop->linker->commandline中添加了“DevIL.lib ILU.lib ILUT.lib”库函数。我还添加了链接器->general->additional library directory的路径。我也尝试过使用input additional dependency进行调整,但没有效果。.lib和.dll文件也放在同一个目录中。在proj属性配置中,我没有在任何地方提到.dll(我应该吗?我尝试了不同的位置,但仍然出现错误)。我知道有大量关于link 2019错误的帖子,但我迄今为止在搜索我的特定问题时并没有好运。我将感激任何建议、评论或可以找到线索的链接,以便了解为什么会发生这种情况。
以下是来自日志的链接器命令:
以下是构建日志本身的链接器命令:
链接: C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ x86_amd64 \ link.exe / ERRORREPORT:PROMPT / OUT:“x64 \ Release \ dff.exe” / VERBOSE / INCREMENTAL / NOLOGO / LIBPATH:C:\ Users \ Sub2 \ Desktop \ dff \ x64 \ Release / MANIFEST / ManifestFile:“x64 \ Release \ dff.exe.intermediate.manifest” / MANIFESTUAC:“level ='asInvoker' uiAccess ='false'” / DEBUG / PDB:“C:\ Users \ Sub2 \ Desktop \ dff \ x64 \ Release \ dff.pdb” / SUBSYSTEM:CONSOLE / OPT:REF / OPT:ICF / TLBID:1 / DYNAMICBASE / NXCOMPAT / IMPLIB:“x64 \ Release \ dff.lib” / MACHINE:X64 x64 \ Release \ dff.exe.embed.manifest.res x64 \ Release \ acquisition.obj x64 \ Release \ azmemutil.obj x64 \ Release \ dff.obj x64 \ Release \ fft.obj x64 \ Release \ FocusMeasure.obj x64 \ Release \ ge.obj x64 \ Release \ stdafx.obj DevIL.lib ILU.lib ILUT.lib 1>链接:警告LNK4075:由于'/ OPT:ICF'规范,忽略'/ INCREMENTAL'
// This is from Win32's <wingdi.h> and <winnt.h>
#if defined(__LCC__)
#define ILAPI __stdcall
#elif defined(_WIN32) //changed 20031221 to fix bug 840421
#ifdef IL_STATIC_LIB
#define ILAPI
#else
#ifdef _IL_BUILD_LIBRARY
#define ILAPI __declspec(dllexport)
#else
#define ILAPI __declspec(dllimport)
#endif
#endif
#elif __APPLE__
#define ILAPI extern
#else
#define ILAPI
#endif
此外:
#define ILAPIENTRY __stdcall
当接近错误时,生成日志信息:
Found KERNEL32_NULL_THUNK_DATA
Referenced in kernel32.lib(KERNEL32.dll)
Loaded kernel32.lib(KERNEL32.dll)
Searching C:\Users\Sub2\Desktop\dff\x64\Release\DevIL.lib:
Searching C:\Users\Sub2\Desktop\dff\x64\Release\ILU.lib:
Searching C:\Users\Sub2\Desktop\dff\x64\Release\ILUT.lib:
Searching C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\MSVCRT.lib:
Searching C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\OLDNAMES.lib:
Searching C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\msvcprt.lib:
Finished searching libraries
Finished pass 1
Invoking CVTRES.EXE:
/machine:amd64
/verbose
/out:"C:\Users\Sub2\AppData\Local\Temp\lnk92ED.tmp"
/readonly
"x64\Release\dff.exe.embed.manifest.res"
Microsoft (R) Windows Resource To Object Converter Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
adding resource. type:MANIFEST, name:1, language:0x0409, flags:0x30, size:2
1>dff.obj : error LNK2019: unresolved external symbol __imp_iluGetImageInfo referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_iluImageParameter referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilDeleteImages referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilSaveImage referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_iluFlipImage referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_iluScale referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilTexImage referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilCopyPixels referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilGetError referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilLoadImage referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilBindImage referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilGenImages referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilInit referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilGetInteger referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilEnable referenced in function main
1>dff.obj : error LNK2019: unresolved external symbol __imp_ilOriginFunc referenced in function main
1>x64\Release\dff.exe : fatal error LNK1120: 16 unresolved externals
1>Done Building Project "C:\Users\Sub2\Desktop\dff\dff.vcxproj" (rebuild target(s)) -- FAILED.
构建失败。
为了确保,我还尝试编写#define _IL_BUILD_LIBRARY,但没有效果。
/P
开关来实现这个。 - undefined