2014-09-23 5 views
3

Использование API компилирует FTDI и связывает отлично под Visual Studio 2012.ошибка LNK2019: неразрешенный внешний символ ___iob_func ссылки в функции "недействительным __cdecl Перетяжка (INT)"

но в VS 2014, это дает:

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

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

ответ

0

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

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

Функция 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^