Библиотека была изменена, чтобы лучше скрывать внутренние структуры.Итак, что вам нужно сделать, это:
typedef jmp_buf* (*png_set_longjmp_fnPtr)(png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size);
png_set_longjmp_fnPtr mypng_set_longjmp_fnPtr = 0;
Затем, когда вы динамически делаете LoadLibrary, сделайте это:
mypng_set_longjmp_fnPtr = (png_set_longjmp_fnPtr) GetProcAddress(hpngdll, "png_set_longjmp_fn");
extern "C"
{
jmp_buf* png_set_longjmp_fn(png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)
{
if (mypng_set_longjmp_fnPtr)
{
return (*mypng_set_longjmp_fnPtr)(png_ptr, longjmp_fn, jmp_buf_size);
}
return 0;
}
}
Следующий код, который вызывает неразрешенную внешнюю, теперь будетснова отлично работает:
if (setjmp(png_jmpbuf(png_ptr)))
{
Я разместил это здесь, так как не мог найти другое место.Я погуглил проблему и обнаружил, что другие люди сталкиваются с той же проблемой, но без решения, поэтому они просто снова опустили версию до libpng.Поэтому я подумал, что опубликую это здесь.