libgcrypt.lib 中未解析的外部符号

Unresolved external symbol in libgcrypt.lib

提问人:Myanju 提问时间:10/16/2014 最后编辑:Myanju 更新时间:10/23/2014 访问量:3474

问:

如果我在 .lib(library) 文件中发现未解析的外部符号,我必须做什么。如果我在 .c 或 .cpp 中发现未解析的外部符号,我可以修复它。但是当我在.lib(library)文件中发现未解析的外部符号时,我该如何解决这个问题?

就我而言,我发现了一个链接器错误,如下所示:

错误 1 错误 LNK2019:函数 _fprintf D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-global.o) 中引用了未解析的外部___mingw_vfprintf符号 错误 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:函数 __gcry_strerror D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-global.o) 中引用了未解析的外部_gpg_strerror符号 错误 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:函数 __gcry_strsource D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-global.o) 中引用了未解析的外部_gpg_strsource符号 错误 9 错误 LNK2019:函数 _do_malloc D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-global.o) 中引用了未解析的外部_gpg_err_set_errno符号 错误 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:无法解析的外部符号_gpg_err_code_from_errno D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-module.o) 错误 13 错误 LNK2019:函数 _gpg_err_make_from_errno D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-global.o) 中引用了未解析的外部_gpg_err_code_from_errno符号 错误 14 错误 LNK2001:无法解析的外部符号_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未解析的外部符号n _sprintf D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-sexp.o) 错误 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:函数 _progress D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(dsa.o) 中引用了未解析的外部_gpg_err_code_from_syserror符号 错误 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(random-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_syserror D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(kdf.o) 错误 27 错误 LNK2019:函数 __gcry_pk_get_keygrip D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(pubkey.o) 中引用了未解析的外部_snprintf符号 错误 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\libvlccore\libgcrypt.lib(rndw32.o) 错误 31 错误 LNK2019:函数 _init_pool D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(libgcrypt_la-secmem.o) 中引用了未解析的外部_getpagesize符号 错误 32 错误 LNK2019:函数 _x931_get_dt D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(random-fips.o) 中引用了未解析的外部_gettimeofday符号 错误 33 错误 LNK2001:无法解析的外部符号_gettimeofday D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\libvlccore\libgcrypt.lib(random-csprng.o) 错误 34 错误 LNK1120: 10 个未解析的外部 D:\VidPlaya_offline\TryingToIncludeUpdateFacility\Vidplaya_Plugin_EmbeddedUpdate\vlcwin\Release\libvlccore.dll 错误 89 错误 LNK2001:未解析的外部符号“public:虚拟结构 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(enum 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

有关此的任何建议都会有所帮助。

visual-c++ libvlc 未解析的外部 libgcrypt

评论

1赞 Roger Rowland 10/16/2014
您可能需要导入一个包含缺失符号的附加库。
0赞 adarshaU 10/16/2014
即使我面临同样的问题。有什么解决办法吗?
0赞 Myanju 10/16/2014
@RogerRowland 感谢您的重播。但是我怎样才能知道所需/需要的 .lib 文件呢?
2赞 Roger Rowland 10/16/2014
我猜有相关库的文档(libgcrypt?),可能还有一个 config.h,可以检查以确保您没有选择不合适的选项。也许你应该重新表述你的问题,并尝试找到同一库的用户。
0赞 Myanju 10/16/2014
@RogerRowland我在config.h中添加了 #define UPDATE_CHECK。

答:

1赞 JDługosz 10/21/2014 #1

我在其他运行时库实现方面的经验使我假设各种变体是通过调用较低级别的表单来实现的。 被放入 thay .o 文件中(为什么?这本身不就是RTL功能吗?它需要那个辅助函数。从名称装饰来看,我希望可以在 mingw 系统库中找到它。我相信printf函数位于您需要链接的补充库中,因为它比msvcrt.dll中的函数增强了。printfvprintffprintf

所以,寻找那个。还要检查您的版本,因为该库可能是针对与您现在使用的版本不同的版本构建的,并且这些详细信息已更改。

评论

0赞 Myanju 10/23/2014
感谢您的回复。如何将 msvcrt.dll 链接到我的项目?
0赞 JDługosz 10/23/2014
你已经是了。我认为您应该查看 mingw 的编译/链接架构的基础知识及其与 windows system32 库 (msvcrt) 的关系。
3赞 Rudolfs Bundulis 10/21/2014 #2

好吧,基本上你必须找到具有该符号的库 - .lib 或 .a(取决于平台)文件。静态库在链接到可执行文件或共享库之前不会解析其符号,因此您可能有一个静态库,但其所有符号都未解析。您可以使用第 1 点下面提到的工具验证这一点 - 当您转储符号时,未解析的符号前面会有一个字母。当您将它们链接到您的应用程序中时,链接器必须解析所有符号,如果缺少某些内容,则会出现未解决的引用错误。您基本上有两种选择:U

1)使用符号转储实用程序,例如(Windows上的Linux和MinGW)或(Windows上的Visual Studio)和符号grep(如果你有一个充满库的目录,你可以为每个文件创建一个脚本),然后当你知道正确的库文件时,将你的代码链接到它(再次取决于Linux和MinGW窗口的平台开关, 通过 Visual Studio 中的属性页添加或指定库。nmdumpbin-l<library name>#pragma comment(lib, "<library name>")

2)如果你有所有库的源代码,你可以做一个纯文本搜索函数的定义,然后链接到有源代码的库应该做的。

3)即使您已经与正确的库链接,但C和C++代码混合在一起,这些问题也可能会出现。具有 C 接口的库应将其标头包含在块中,以便链接器在只有具有 C 名称的函数可用时不会尝试查找具有 C++ 名称的函数。对于使用 FFmpeg 和其他大型开源项目的初学者来说,这是一个常见问题。extern "C"

更新

至于最初的问题——你将用 MinGW 编译的代码与 Visual Studio 链接起来有点奇怪,我想说你最好也将 MinGW 用于你的项目,但正如在类似主题中建议的那样,这可能是由于缺少 .如果你有 MinGW 工具链,请找到文件所在的位置,通过 Visual Studio 属性页将该目录添加到链接器搜索目录,并通过 Visual Studio 属性页或通过上面提到的编译指示将链接器输入添加到项目中。如果你没有 MinGW 工具链,那么你应该下载它,但你需要找到合适的平台——但是我想既然你在某个地方得到了库,你就知道它是 32 位还是 64 位。__mingw_vfprinflibmingwex.alibmingwex.a

更新 2

下面是 MinGW 包管理器的示例屏幕截图,显示了哪个包包含该库:

MinGW package manager showing libmingwex.a

评论

0赞 Myanju 10/23/2014
感谢您的回复。我下载了mingw并安装了。但是我在安装的目录中没有找到libmingwex.a。我是否应该在 mingw 安装管理器中选择特定的软件包?
0赞 Rudolfs Bundulis 10/23/2014
好吧,我查看了我的 MinGW 安装,我有 和 ,它似乎是软件包的一部分。请参阅答案所附的图片。顺便说一句,我没有看到带有其他未解决符号的更新问题,它可能需要更多,而不仅仅是这个库。libmingwex.aC:\MinGW\libC:\MinGW\mingw32\libmingw32-mingwrt
0赞 JDługosz 10/23/2014
@RudolfsBundulis你怎么能从那篇帖子中看出他正在将 Visual Studio 与 mingw 混合在一起?
0赞 Rudolfs Bundulis 10/23/2014
@jdlugosz well, the is obviously from Visual Studio linker and if the library he is using has MinGW runtime linked in then most likely it was built with MinGW (except for the very small chance that someone used Visual Studio and linked in MinGW libraries which would make no sense, since all the standard input/output stuff is already in the Visual Studio runtime)LNK2019
0赞 JDługosz 10/24/2014
I didn't know if the other linkers used totally different formatting and error systems or not; it might be formatted to look like MS's on purpose. Also, the LINK.EXE comes with the SDK platform without Visual Studio; since it's meant to be compatible with MSVCRT.dll and system libs, and you want the system headers from the SDK anyway, it might be sensible to use that linker in the toolchain.