链接器错误"libpng.lib中的未解析的外部符号__imp___iob_func"

Srv*_*v19 3 c windows-mobile libpng

我正在尝试为Windows Mobile 6编译libpng,但是我得到以下链接器错误:

error LNK2019: unresolved external symbol __imp___iob_func referenced in function png_default_error libpng.lib
error LNK2019: unresolved external symbol __imp_abort referenced in function png_longjmp
Run Code Online (Sandbox Code Playgroud)

使用/ MD选项完成编译,我的主项目之间相同.zlib和libpng.

当使用/ MT时,仍然存在错误,但略有不同:

error LNK2019: unresolved external symbol __iob_func referenced in function png_default_error
error LNK2019: unresolved external symbol abort referenced in function png_longjmp
Run Code Online (Sandbox Code Playgroud)

这带来了几个问题.

  1. 什么是__imp___iob_func__imp_abort
  2. 它们在哪里实施?或者,如何排除对它们的引用?

我的libpng编译器选项:

/Od /I "..\lib\zlib-1.2.7" /I "..\lib\lpng1512" /D "_DEBUG" /D "_WIN32_WCE=0x502" /D "UNDER_CE" /D "WIN32_PLATFORM_PSPC" /D "WINCE" /D "DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "LIBPNG_EXPORTS" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /MDd /fp:fast /GR- /Fo"Windows Mobile 6 Professional SDK (ARMV4I)\Debug/" /Fd"Windows Mobile 6 Professional SDK (ARMV4I)\Debug/vc80.pdb" /W3 /nologo /c /Zi /TC /QMFPE-
Run Code Online (Sandbox Code Playgroud)

图书馆员选择:

/OUT:"Windows Mobile 6 Professional SDK (ARMV4I)\Debug\libpng.lib" /LIBPATH:"C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4i" /NOLOGO /NODEFAULTLIB Coredll.lib /SUBSYSTEM:WINDOWSCE,5.02
Run Code Online (Sandbox Code Playgroud)

我的项目(libpngStreamWrap)编译器选项:

/Od /I "..\lib\lpng1512" /D "_DEBUG" /D "_WIN32_WCE=0x502" /D "UNDER_CE" /D "WIN32_PLATFORM_PSPC" /D "WINCE" /D "DEBUG" /D "_LIB" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /D "_WINDLL" /Gm /EHsc /MDd /fp:fast /GR- /Yu"stdafx.h" /Fp"Windows Mobile 6 Professional SDK (ARMV4I)\Debug/libpngStreamWrap.pch" /Fo"Windows Mobile 6 Professional SDK (ARMV4I)\Debug/" /Fd"Windows Mobile 6 Professional SDK (ARMV4I)\Debug/vc80.pdb" /W3 /nologo /c /Zi /TP
Run Code Online (Sandbox Code Playgroud)

链接器选项:

/OUT:"Windows Mobile 6 Professional SDK (ARMV4I)\Debug\libpngStreamWrap.dll" /NOLOGO /DLL /MANIFEST:NO /NODEFAULTLIB:"oldnames.lib" /DYNAMICBASE /NXCOMPAT /ERRORREPORT:PROMPT coredll.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib "..\libpng\windows mobile 6 professional sdk (armv4i)\debug\libpng.lib" "..\zlib\windows mobile 6 professional sdk (armv4i)\debug\zlib.lib"  /SUBSYSTEM:WINDOWSCE,5.02 /VERBOSE:lib
Run Code Online (Sandbox Code Playgroud)

Gle*_*son 5

最近在sourceforge.net(主题libpng Visual Studio 2010项目)的png-mng-implement列表中讨论过这个问题:

经过几次漫长的谷歌搜索会议后发现,原因是libpng调试配置文件"运行时库"设置未设置为"多线程调试DLL"为例外,而是设置为"多线程DLL",这是相同的配置文件在发布版本中使用.

这是一个错误.这似乎是一个坏的手编辑的vcxproj项目文件的结果 - 如果运行时库元素被删除或无效它被设置为默认,这是/ MD的DLL.

它可以在libpng 1.5中修复,但这将是一个API更改,并将破坏现有的,工作的,libpng 1.5项目.因此,我认为最好的事情是向project/vstudio添加警告通知(可能在单独的文件WARNING中),指出问题所在.一旦他们知道可能存在错误,人们就很容易更改设置.