【问题标题】:Unresolved externals despite linking in zlib.lib尽管在 zlib.lib 中链接,但未解决的外部问题
【发布时间】:2011-07-22 10:13:28
【问题描述】:

我一直在尝试编译一个在 VC++ 2010 中使用 zlib 压缩的应用程序。

我明白了

error LNK2019: unresolved external symbol _inflateInit2_ referenced in function ...

错误消息,如果我没有链接库,这不会是不寻常的。我链接了静态发布的 zlib 库。

我已经设法让这个完全相同的库和头文件配置在不同的解决方案中完美运行,因此这种行为非常出乎意料。

任何想法都会受到赞赏。

更新:链接器命令行

/OUT:"C:\Documents and Settings\Suthke\My Documents\Visual Studio 2010\Projects\SBRapGen2\Debug\SBRapGen2.exe" /INCREMENTAL /NOLOGO "zlib.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\SBRapGen2.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Documents and Settings\Suthke\My Documents\Visual Studio 2010\Projects\SBRapGen2\Debug\SBRapGen2.pdb" /SUBSYSTEM:CONSOLE /PGD:"C:\Documents and Settings\Suthke\My Documents\Visual Studio 2010\Projects\SBRapGen2\Debug\SBRapGen2.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

更新 2:详细链接器输出:

1>------ Build started: Project: SBRapGen2, Configuration: Release Win32 ------
1>  
1>  Starting pass 1
1>  Processed /DEFAULTLIB:uuid.lib
1>  Processed /DEFAULTLIB:msvcprt
1>  Processed /DEFAULTLIB:zlib.lib
1>  Processed /DEFAULTLIB:MSVCRT
1>  Processed /DEFAULTLIB:OLDNAMES
1>  
1>  Searching libraries
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\zlib.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\msvcprt.lib:
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\MSVCRT.lib:
1>        Found @__security_check_cookie@4
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(secchk.obj)
1>        Found __imp__sprintf
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__ceil
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__free
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__malloc
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__printf
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__fopen
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__fread
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__fwrite
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__ftell
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__fseek
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__fclose
1>          Referenced in SBRapGen2.obj
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found _mainCRTStartup
1>          Loaded MSVCRT.lib(crtexe.obj)
1>        Found ___report_gsfailure
1>          Referenced in MSVCRT.lib(secchk.obj)
1>          Loaded MSVCRT.lib(gs_report.obj)
1>        Found ___security_cookie
1>          Referenced in MSVCRT.lib(secchk.obj)
1>          Referenced in MSVCRT.lib(gs_report.obj)
1>          Loaded MSVCRT.lib(gs_cookie.obj)
1>        Found __IMPORT_DESCRIPTOR_MSVCR100
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found ___CxxSetUnhandledExceptionFilter
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(unhandld.obj)
1>        Found __amsg_exit
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp____getmainargs
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __dowildcard
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(wildcard.obj)
1>        Found __newmode
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(_newmode.obj)
1>        Found _atexit
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(atonexit.obj)
1>        Found __RTC_Terminate
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(_initsect_.obj)
1>        Found __imp___cexit
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp___exit
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __XcptFilter
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp__exit
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp____initenv
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __IsNonwritableInCurrentImage
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(pesect.obj)
1>        Found __initterm
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found ___xc_a
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(cinitexe.obj)
1>  Processed /DEFAULTLIB:kernel32.lib
1>   Processed /DISALLOWLIB:libcmt.lib
1>   Processed /DISALLOWLIB:libcmtd.lib
1>   Processed /DISALLOWLIB:msvcrtd.lib
1>        Found __initterm_e
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found ___native_startup_state
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(natstart.obj)
1>        Found __SEH_epilog4
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Loaded MSVCRT.lib(sehprolg4.obj)
1>        Found __except_handler4
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Referenced in MSVCRT.lib(pesect.obj)
1>          Referenced in MSVCRT.lib(sehprolg4.obj)
1>          Loaded MSVCRT.lib(chandler4gs.obj)
1>        Found __imp___configthreadlocale
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found ___globallocalestatus
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(xthdloc.obj)
1>        Found __setdefaultprecision
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(fp8.obj)
1>        Found __imp____setusermatherr
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __matherr
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(merr.obj)
1>        Found __setargv
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(dllargv.obj)
1>        Found __commode
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(xncommod.obj)
1>        Found __imp___commode
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp___fmode
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __fmode
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(xtxtmode.obj)
1>        Found __imp____set_app_type
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found ___security_init_cookie
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded MSVCRT.lib(gs_support.obj)
1>        Found __crt_debugger_hook
1>          Referenced in MSVCRT.lib(gs_report.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __NULL_IMPORT_DESCRIPTOR
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found MSVCR100_NULL_THUNK_DATA
1>          Referenced in MSVCRT.lib(MSVCR100.dll)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found "void __cdecl terminate(void)" (?terminate@@YAXXZ)
1>          Referenced in MSVCRT.lib(unhandld.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __unlock
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found ___dllonexit
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __lock
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __imp___onexit
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __except_handler4_common
1>          Referenced in MSVCRT.lib(chandler4gs.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __invoke_watson
1>          Referenced in MSVCRT.lib(fp8.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>        Found __controlfp_s
1>          Referenced in MSVCRT.lib(fp8.obj)
1>          Loaded MSVCRT.lib(MSVCR100.dll)
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\zlib.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\kernel32.lib:
1>        Found __imp__InterlockedExchange@8
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__Sleep@4
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__InterlockedCompareExchange@12
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__HeapSetInformation@16
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__EncodePointer@4
1>          Referenced in MSVCRT.lib(crtexe.obj)
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__TerminateProcess@8
1>          Referenced in MSVCRT.lib(gs_report.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__GetCurrentProcess@0
1>          Referenced in MSVCRT.lib(gs_report.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__UnhandledExceptionFilter@4
1>          Referenced in MSVCRT.lib(gs_report.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__SetUnhandledExceptionFilter@4
1>          Referenced in MSVCRT.lib(gs_report.obj)
1>          Referenced in MSVCRT.lib(unhandld.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__IsDebuggerPresent@0
1>          Referenced in MSVCRT.lib(gs_report.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__DecodePointer@4
1>          Referenced in MSVCRT.lib(atonexit.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__QueryPerformanceCounter@4
1>          Referenced in MSVCRT.lib(gs_support.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__GetTickCount@0
1>          Referenced in MSVCRT.lib(gs_support.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__GetCurrentThreadId@0
1>          Referenced in MSVCRT.lib(gs_support.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__GetCurrentProcessId@0
1>          Referenced in MSVCRT.lib(gs_support.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __imp__GetSystemTimeAsFileTime@4
1>          Referenced in MSVCRT.lib(gs_support.obj)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found __IMPORT_DESCRIPTOR_KERNEL32
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>        Found KERNEL32_NULL_THUNK_DATA
1>          Referenced in kernel32.lib(KERNEL32.dll)
1>          Loaded kernel32.lib(KERNEL32.dll)
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\user32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\gdi32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\winspool.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\comdlg32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\advapi32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\shell32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\ole32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\oleaut32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\uuid.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbc32.lib:
1>      Searching C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib\odbccp32.lib:
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\msvcprt.lib:
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\MSVCRT.lib:
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\OLDNAMES.lib:
1>      Searching C:\Program Files\Microsoft Visual Studio 10.0\VC\lib\zlib.lib:
1>  
1>  Finished searching libraries
1>  
1>  Finished pass 1
1>  
1>SBRapGen2.obj : error LNK2001: unresolved external symbol _deflateEnd
1>SBRapGen2.obj : error LNK2001: unresolved external symbol _inflateInit2_
1>SBRapGen2.obj : error LNK2001: unresolved external symbol _inflate
1>SBRapGen2.obj : error LNK2001: unresolved external symbol _inflateEnd
1>SBRapGen2.obj : error LNK2001: unresolved external symbol _deflate
1>SBRapGen2.obj : error LNK2001: unresolved external symbol _deflateInit2_

【问题讨论】:

标签: c++ zlib


【解决方案1】:

就我而言,在 vs2017 中使用 NuGet 安装 zlib-vc140-static-64 (v1.2.11) 或 zlib_native (v1.2.11)。

【讨论】:

    【解决方案2】:

    我自己在使用 Visual Studio 2017 时遇到了同样的问题。我收到如下错误消息:

    error LNK2019: unresolved external symbol __imp__deflate referenced in function 
    error LNK2019: unresolved external symbol __imp__deflateEnd referenced in function 
    error LNK2019: unresolved external symbol __imp__inflate referenced in function 
    error LNK2019: unresolved external symbol __imp__inflateEnd referenced in function 
    error LNK2019: unresolved external symbol __imp__deflateInit2_ referenced in function
    error LNK2019: unresolved external symbol __imp__inflateInit2_ referenced in function
    

    我按照 Michael Burr 的提示检查了我的 zlib 文件是否包含这些方法:

    dumpbin /symbols zlib.lib
    

    输出显示方法存在,但 Visual Studio 仍然抱怨。最终,我从他们的 github 存储库下载了最新的 zlib 稳定版本,然后编译它(使用 Visual Studio 开发者控制台)。尽管最终我找到了他们的 MS Makefile,其中包含我需要运行的命令,但他们的说明并没有直接帮助。

    nmake -f win32/Makefile.msc
    

    查看他们的 win32/Makefile.msc 文件,了解有关构建过程的更多信息。

    构建过程生成了两个 .lib 文件。我的项目中真正需要的是一个名为“zdll.lib”的文件。 (有关信息,请参阅他们的文档文件 DLL_FAQ.txt)。回到 Visual Studio 中,我必须手动将文件添加到我的项目中(NOT 使用 Linker --> General --> Additional Library Directories 方法,因为这会触发其他问题。)您可以添加它们通过右键单击解决方案对象(不是列表中最顶部的项目,而是第二个项目。在下图中,我的项目称为 Lasso,因此您需要单击项目中的等效项。)

    转到:添加 --> 现有项目...

    然后选择生成的zdll.lib文件。

    Lib files explicitly added to Visual Studio project

    【讨论】:

      【解决方案3】:

      就我而言,我修改了

      • 配置 -> 链接器 -> 输入 -> 附加依赖项

      阅读ucrt.lib;vcruntime.lib;msvcrt.lib;kernel32.lib

      这使 libz 能够在带有 VS2015 的 Windows 10 下构建

      确保构建类型是 /MD

      如果为 libpng 构建(需要 zlib)也是这种情况,相同的修改可以使用旧包含的默认“项目”文件成功构建。

      【讨论】:

      • 太棒了,我浪费了 2 天的时间来为 ARM64 构建它。这个解决了我的问题。谢谢
      【解决方案4】:

      如果您使用的是 contrib/ 中提供的 VS2010 解决方案,请注意它有问题。 zlibstat 项目定义了 ZLIB_WINAPI,它根据zlib FAQ 用于打开 STDCALL 约定。只需将其从项目设置中删除并重新编译 lib。

      【讨论】:

      • +1 另请注意,您也可以通过在主项目中定义 ZLIB_WINAPI 来解决问题。
      • 天哪,谢谢!维护者确实需要解决这个问题。
      • 救命稻草,会永远注意到这一点
      • @Magallo 你可以在#include zlib.h 之前“#define ZLIB_WINAPI”
      • 这确实应该是公认的答案。这为我节省了很多时间。
      【解决方案5】:

      请注意,库的顺序很重要。假设您要将 A.OBJ、B.LIB 和 C.LIB 与按此顺序指定的输入文件链接。如果 C.LIB 调用 B.LIB 中的函数,将找不到它(除非它已经从 A.OBJ 中偶然调用过)。
      这可能是您问题的根源吗?

      【讨论】:

      • 不太可能。我在其他项目中的代码结构完全相同,可以顺利编译和链接。
      • 虽然我记得链接器至少曾经像 TonyK 描述的那样运行,但根据这个 MSDN 文档,链接器将返回搜索以前的 .lib 文件:msdn.microsoft.com/en-us/library/hcce369f.aspx。我仍然认为验证这一点是一个好主意,因为我很确定 MS 工具过去的行为与 TonyK 描述的一样,所以文档可能不清楚其中的微妙之处。
      • 我将代码减少到只有一个 .cpp 用于测试(因此只需要一个 .obj),链接问题仍然存在。
      【解决方案6】:

      一些暗中的建议:

      尝试运行dumpbin /symbols zlib.lib 以查看该库中的符号是否如您所愿(即,inflateInit2 是否在其中?)。

      如果构建当前依赖于 lib 路径搜索来定位 zlib.lib,请尝试指定库的完整绝对路径,以排除链接器在您系统的其他地方找到一些陈旧的 zlib 库。

      另外,发布用于链接器的命令行(来自构建日志文件)。

      更新:

      如果您不小心混合了 32 位和 64 位组件(即,zlib.lib 文件是为 x86 构建的,而应用程序是为 x64 构建的),您会看到类似的行为。链接器不会抱怨找不到 lib 文件,也不会抱怨 lib 文件中的对象用于不同的平台。鉴于您的错误消息提到了一个没有任何装饰的符号,我敢打赌链接器正在构建一个 x64 应用程序,但也许 zlib.lib 有 x86 对象(因此那里有一个名为 _inflateInit2 的符号,装饰有下划线或其他)。

      (顺便说一句 - 我想知道是否可以在同一个 lib 文件中混合 x86 和 x64 对象,只要它们具有不同的名称。并不是我想实际这样做)。

      【讨论】:

      • 所有必需的符号似乎都存在,因为使用了 dumpbin(这也证实了我现在能够使用相同的库编译不同的项目)。
      • @Michael:检查过,都是 x86
      • @RSuthke:在这种情况下,有趣的是错误消息中的名称上没有'_'或'@'前缀,因为如果我',MSVC 的 x86 调用约定应该添加这些前缀之一m 没有记错(并且 x64 调用约定不使用前缀)。
      • @Michael:我的错,我从内存中写了代码,确切的代码如下:` 1>zlibwrap.obj : error LNK2019: unresolved external symbol inflateInit2 referenced在函数 "public: unsigned long __thiscall CZLibWrap::DecompressBuffer(unsigned char *,unsigned long,unsigned char *,unsigned long)" (?DecompressBuffer@CZLibWrap@@QAEKPAEK0K@Z)` 更新:实际上,有这个下划线,但是该网站的软件确实会将成对的下划线转换为斜体。
      • @RSuthke:好的-我应该认为由于斜体的原因,格式可能会出现问题......所以没有找到的符号是:_inflateInit2_,带有一个前导和尾随下划线,对吧?顺便说一句,您可以通过将代码括在反引号字符中或将代码块缩进 4 个或更多空格来格式化代码 sn-ps(这对 cme​​ts 不起作用)。
      【解决方案7】:

      您使用 VC++ 2010 以外的其他工具编译了 zlib 静态库?

      这是 VS2008/05 的最新升级吗?

      您是否尝试过使用 2010 工具集重新编译静态库?

      【讨论】:

      • 这个库与用于编译项目的 VC++ 2010 完全相同。它还成功地用于使用相同的 zlib 处理代码编译其他项目。
      【解决方案8】:

      您是否确认您的 zlib 函数原型位于 extern "C" 块中?如果不是,那么链接器将寻找具有 C++ 名称的函数,而 zlib.lib 将包含未损坏的 C 名称。

      【讨论】:

      • 根据标准 zlib.h 头文件,所有函数原型都位于外部“C”块中。
      猜你喜欢
      • 2020-10-15
      • 2014-04-29
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2013-03-03
      相关资源
      最近更新 更多