3

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

私のメインプロジェクトと同じように、コンパイルは /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

それはいくつかの疑問をもたらします。

  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-

ライブラリアン オプション:

/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

私のプロジェクト (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

リンカー オプション:

/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
4

1 に答える 1

5

これについては、sourceforge.net の png-mng-implement リスト (トピック libpng Visual Studio 2010 プロジェクト) で最近議論されています。

いくつかの長いグーグルセッションの後、その理由は、libpngデバッグプロファイルの「ランタイムライブラリ」設定が例外として「マルチスレッドデバッグDLL」に設定されておらず、代わりに同じプロファイルである「マルチスレッドDLL」に設定されていることが判明しましたリリース ビルドで使用されます。

これはバグです。これは、vcxproj プロジェクト ファイルの不適切な編集の結果であると思われます。RuntimeLibrary 要素が削除されているか無効である場合、DLL の場合は /MD である既定値に設定されます。

これは libpng 1.5 で修正される可能性がありますが、これは API の変更であり、既存の動作中の libpng 1.5 プロジェクトが壊れる可能性があります。したがって、最善の方法は、問題を指摘する警告通知 (おそらく別のファイル WARNING 内) を projects/vstudio に追加することだと思います。設定が間違っている可能性があることがわかったら、設定を変更するのは簡単です。

于 2012-10-17T21:44:09.100 に答える