ошибка LNK2019: неразрешенный внешний символ ___iob_func, указанный в функции & quot; void __cdecl Padding (int) & quot;

Использование FTDI API прекрасно компилируется и связывается в Visual Studio 2012.

но под VS 2014 он дает:

Error LNK2019: unresolved external symbol ___iob_func referenced in function "void __cdecl Padding(int)"

Изменились ли стандартные библиотеки?

5

Решение

Да, стандартные библиотеки изменились, и FTDI, похоже, не заботится — по крайней мере, не в версии драйвера CDM2.12.18.

Проблема описана в ответах на этот вопрос.

void __cdecl Padding(int) функция от devcon.obj в ftd2xx.lib виновник Это ссылается на один из stdin, stdout или же stderrв виде макросов. Содержимое этих макросов изменилось.

Поскольку мы действительно не ожидаем ввода-вывода от библиотеки FTDI, мы могли бы также предоставить самую простую возможную реализацию:

FILE* __cdecl _imp____iob_func() { return 0; }

Если вам нужна версия, которая делает то, что должна:

FILE* __cdecl _imp____iob_func()
{
struct _iobuf_VS2012 { // ...\Microsoft Visual Studio 11.0\VC\include\stdio.h #56
char *_ptr;
int   _cnt;
char *_base;
int   _flag;
int   _file;
int   _charbuf;
int   _bufsiz;
char *_tmpfname; };
// VS2015 has FILE = struct {void* _Placeholder}

static struct _iobuf_VS2012 bufs[3];
static char initialized = 0;

if (!initialized) {
bufs[0]._ptr = stdin->_Placeholder;
bufs[1]._ptr = stdout->_Placeholder;
bufs[2]._ptr = stderr->_Placeholder;
initialized = 1;
}

return (FILE*)&bufs;
}
1

Другие решения


По вопросам рекламы [email protected]