2014-10-16 5 views
3

Что мне нужно сделать, если я нашел неразрешенный внешний символ в файле .lib (library). Если я нашел нерешенный внешний символ в .c или .cpp, я могу исправить его. Но когда я нашел неразрешенный внешний символ в файле .lib (library), как я могу это решить?Неразрешенный внешний символ в libgcrypt.lib

В моем случае я нашел ошибку компоновщика так:

Ошибка 1 Ошибка LNK2019: неразрешенный внешний символ ___mingw_vfprintf ссылки в функции _fprintf D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la -global.o) ошибка 2 ошибка LNK2001: неразрешенный внешний символ ___mingw_vfprintf D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-misc.o) ошибка 3 ошибка LNK2001: неразрешенный внешний символ _gpg_strerror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (ecc.o) Ошибка 4 Ошибка LNK2019: неразрешенный внешний символ _gpg_strerror ссылка в функции __gcry_strerror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-global.o) Ошибка 5 Ошибка LNK2001: неразрешенный внешний символ _gpg_strerror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-misc.o) ошибка 6 ошибка LNK2001: неразрешенный внешний символ _gpg_strerror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (md.o) ошибка 7 ошибка LNK2001: неразрешенный внешний символ _gpg_strerror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-fips.o) ошибка 8 ошибка LNK2019: неразрешенный внешний Symb ол _gpg_strsource ссылки в функции __gcry_strsource D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-global.o) Ошибка 9 Ошибка LNK2019: неразрешенный внешний символ _gpg_err_set_errno ссылка в функции _do_malloc D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-global.o) ошибка 10 ошибка LNK2001: неразрешенный внешний символ _gpg_err_set_errno D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-stdmem.o) Ошибка 11 ошибка LNK2001: неразрешенный внешний символ _gpg_err_set_errno D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-secmem.o) Ошибка 12 ошибка LNK2001: unr esolved внешний символ _gpg_err_code_from_errno D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-module.o) Ошибка 13 Ошибка LNK2019: неразрешенный внешний символ _gpg_err_code_from_errno ссылка в функции _gpg_err_make_from_errno D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-global.o) ошибка LNK2001 14 ошибка: неразрешенный внешний символ _gpg_err_code_from_errno D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-sexp.o) ошибка 15 ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_errno D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (md.o) Ошибка 16 ошибка LNK2001 : Неразрешенный внешний символ _gpg_err_code_from_errno D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (primegen.o) Ошибка 17 Ошибка LNK2019: неразрешенный внешний символ ___mingw_vsprintf ссылка в функции _sprintf D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-Sexp.о) Ошибка 18 Ошибка LNK2001: неразрешенный внешний символ ___mingw_vsprintf D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (ac.o) Ошибка 19 Ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_syserror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (primegen.o) ошибка 20 ошибка LNK2019: неразрешенный внешний символ _gpg_err_code_from_syserror ссылка в функции _progress D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (dsa.o) Ошибка 21 ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_syserror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (ecc.o) Ошибка 22 ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_syserror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (случайных fips.o) Ошибка 23 Ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_syserror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (mpicoder.o) ошибка 24 ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_syserror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (cipher.o) ошибка 25 ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_syserror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (pubkey.o) Ошибка 26 ошибка LNK2001: неразрешенный внешний символ _gpg_err_code_from_s yserror D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (kdf.o) Ошибка 27 Ошибка LNK2019: неразрешенный внешний символ _snprintf ссылка в функции __gcry_pk_get_keygrip D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt .lib (pubkey.o) ошибка 28 ошибка LNK2001: неразрешенный внешний символ _snprintf D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (md.o) ошибка 29 ошибка LNK2001: неразрешенный внешний символ _snprintf D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (ecc.o) ошибка 30 ошибка LNK2001: неразрешенный внешний символ _snprintf D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvl ccore \ libgcrypt.lib (rndw32.o) Ошибка 31 Ошибка LNK2019: неразрешенный внешний символ _getpagesize ссылка в функции _init_pool D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (libgcrypt_la-secmem.o) Ошибка 32 ошибка LNK2019: неразрешенный внешний символ _gettimeofday ссылка в функции _x931_get_dt D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (случайных fips.o) ошибка 33 ошибка LNK2001: неразрешенный внешний символ _gettimeofday D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ libvlccore \ libgcrypt.lib (случайных csprng.o) ошибка 34 ошибка LNK1120: 10 неразрешенные внешние D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ Release \ libvlccore.dll Ошибка 89 ошибка LNK2001: неразрешенный внешний символ "public: virtual struct QMetaObject const * __thiscall UpdateDialog :: metaObject (void) const" (? MetaObject @ UpdateDialog @@ UBEPBUQMetaObject @@ XZ) D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ lib_plugin \ help.obj Ошибка ошибки 90 LNK2001: неразрешенный внешний символ "public: virtual void * __thiscall UpdateDialog :: qt_metacast (char const *)" (? qt_metacast @ UpdateDialog @@ UAEPAXPBD @ Z) D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ lib_plugin \ help.obj Ошибка 91 ошибка LNK2001: неразрешенный внешний символ "public: virtual int __thiscall UpdateDialog :: qt_metacall (перечисление QMetaObject :: Call, int, void * *)" (? qt_metacall @ UpdateDialog @@ UAEHW4Call @ QMetaObject @@ HPAPAX @ Z) D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ lib_plugin \ help.OBJ Ошибка 92 Ошибка LNK1120: 3 неразрешенных внешних D: \ VidPlaya_offline \ TryingToIncludeUpdateFacility \ Vidplaya_Plugin_EmbeddedUpdate \ vlcwin \ Release \ Plugins \ lib_plugin.dll

Любые предложения относительно этого было бы полезно.

+1

Вы, вероятно, нужно импортировать дополнительный LIB, содержащий недостающий символ. –

+0

Даже я столкнулся с той же проблемой. Все решения? – adarshaU

+0

@RogerRowland Спасибо за повтор. Но как я могу узнать желаемый/необходимый файл .lib? – Myanju

ответ

2

Ну, в основном вы должны найти библиотеку - .lib или .a (в зависимости от платформы) файл с этим символом. Статические библиотеки не разрешают свои символы до тех пор, пока не будут связаны с исполняемой или разделяемой библиотекой, поэтому у вас может быть статическая библиотека, у которой нет всех ее символов. Вы можете проверить это, используя инструменты, упомянутые ниже в пункте 1 - когда вы сбрасываете символы, неразрешенные будут иметь перед собой письмо U. И когда вы связываете их с вашим приложением, компоновщик должен разрешить все символы, а если что-то не хватает, вы получите нерешенные ссылочные ошибки. Вы в основном есть два варианта:

1) Используйте символ демпинг утилиты как nm (Linux и MinGW на Windows) или dumpbin (Visual Studio на Windows) и Grep для символа (если у вас есть каталог, полный библиотек вы можете создайте скрипт, который делает это для каждого файла), а затем, когда вы знаете, что правильный файл библиотеки связывает ваш код с ним (опять же зависит от платформы -l<library name> для Windows и MinGW, добавьте #pragma comment(lib, "<library name>") или укажите библиотеку через страницы свойств в Visual Studio.

2) Если у вас есть источники для всех библиотек, вы можете выполнить простой текстовый поиск для определения функции, а затем связать ее с библиотекой, в которой должен быть источник.

3) Эти проблемы также могут возникнуть, даже если вы уже связываетесь с соответствующей библиотекой, но смешиваются с кодом C и C++. Библиотеки с интерфейсом C должны иметь заголовок, включенный в блок extern "C", так что компоновщик не пытается найти функцию с именем C++, когда доступна только функция с именем C. Это обычная проблема для начинающих с FFmpeg и другими крупными проектами с открытым исходным кодом.

UPDATE

Что касается первоначального вопроса с __mingw_vfprinf — это немного странно, что вы связываете код, который был скомпилирован с MinGW с Visual Studio, я бы сказал, что вы бы лучше использовать MinGW для вашего проекта тоже, но, как было предложено в similar topic, это может быть причиной отсутствия libmingwex.a. Если у вас есть инструментальная комбинация MinGW, найдите, где находится файл, добавьте этот каталог в каталоги поиска компоновщика через страницы свойств Visual Studio и добавьте libmingwex.a в качестве вложения компоновщика в ваш проект либо через страницы свойств Visual Studio, либо через указанную выше прагму. Если у вас нет инструментальной комбинации MinGW, тогда вы должны скачать его, но вам нужно получить нужную платформу —, но я думаю, так как вы получили библиотеку где-нибудь, если знаете, 32-битный или 64-битный.

UPDATE 2

Вот скриншот образец MinGW менеджера пакетов показывая, какой пакет содержит библиотеку:

MinGW package manager showing libmingwex.a

+0

Спасибо за ответ. Я загрузил mingw и установил. но я не нашел libmingwex.a в установленной директории. Должен ли я выбрать конкретный пакет в менеджере установки mingw? – Myanju

+0

Ну, я заглянул в мою установку MinGW, и у меня есть 'libmingwex.a' под' C: \ MinGW \ lib' и 'C: \ MinGW \ mingw32 \ lib', он, кажется, является частью' mingw32-mingwrt 'пакет. См. Изображение, прикрепленное к ответу. Btw Я не видел обновленный вопрос с дополнительными неразрешенными символами, для этого может потребоваться больше всего именно этой библиотеки. –

+0

@ RudolfsBundulis, как вы можете сказать с этого поста, что он смешивает Visual Studio с mingw? –

1

Мой опыт работы с другими реализациями библиотеки времени выполнения позволяет мне предположить, что различные варианты printf реализованы путем вызова более низкого уровня vprintf. fprintf был помещен в файл .o (почему? Это не функция RTL?), И ей нужна эта вспомогательная функция. Я считаю, что из украшений имен это можно найти в системной библиотеке. Я верю, что функции printf находятся в дополнительной библиотеке, с которой вам нужно связать, поскольку она улучшена над версиями в msvcrt.dll.

Итак, ищите это. Проверьте свои версии, так как, возможно, lib был создан против другой версии, чем вы используете сейчас, и эти данные изменились.

+0

Спасибо за ответ. Как связать файл msvcrt.dll с моим проектом? – Myanju

+0

Вы уже. Я думаю, вам стоит ознакомиться с основами архитектуры компиляции/ссылок mingw и ее отношением к библиотеке windows32 (msvcrt). –

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

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