以前のプロジェクトを、VisualStudio 2015 で再構築すると、
Error LNK2019: unresolved external symbol ___iob_func referenced in function
というエラーでビルドに失敗しました。
ちょいと調べてみたら VS2015より前のバージョンでは
#define stdin (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])
が定義されていて
VS2015では
#define stdin (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))
と定義が異なっているためのエラーのようです。
そう、一部のライブラリについて古いバージョンでのビルドを利用してるわけです。
すべてのライブラリを VS2015 で再ビルドすればいいのですが、よそのプロジェクトだったりしてめんどくさい。
___iob_func はないので、つくっちまおう。ということで。
FILE _iob[] = {*stdin, *stdout, *stderr};
extern "C" FILE * __cdecl __iob_func(void)
{
return _iob;
}
ってのを書いてビルドしたら動作するようになりました。
次にビルドするときのために記録しておこ。
参考
https://stackoverflow.com/questions/30412951/unresolved-external-symbol-imp-fprintf-and-imp-iob-func-sdl2
0 件のコメント:
コメントを投稿