当前位置: 首页 > 知识库问答 >
问题:

libgcrypt中未解析的外部符号。解放党

颜镜
2023-03-14

如果在中发现未解析的外部符号,我必须做什么。库文件。如果我在中发现未解析的外部符号。c或。cpp我能修好它。但当我在里面发现了未解决的外部符号。lib(library)文件如何解决这个问题?

在我的例子中,我发现了如下链接器错误:

关于这一点的任何建议都将是有益的。

共有2个答案

陆阳曜
2023-03-14

根据我在其他运行时库实现方面的经验,我认为各种printf变体都是通过调用较低级别的vprintf表单来实现的fprintf已投入使用。o文件(为什么?这本身不是RTL函数吗?)它需要帮助函数。从名字装饰来看,我希望这可以在mingw系统库中找到。我相信printf函数位于一个需要链接的辅助库中,因为它比msvcrt中的函数更强大。dll。

所以,看看这个。也要检查你的版本,因为可能lib是根据与你现在使用的版本不同的版本构建的,这些细节已经改变了。

翟光赫
2023-03-14

基本上你得找到图书馆。lib或。具有该符号的文件(取决于平台)。静态库在链接到可执行或共享库之前不会解析其符号,因此您可能有一个没有解析其所有符号的静态库。您可以使用第1点下面提到的工具来验证这一点——当您转储符号时,未解析的符号前面将有一个U字母。当你将它们链接到你的应用程序中时,链接器必须解析所有的符号,如果缺少了什么,你就会得到未解析的引用错误。你基本上有两个选择:

1)使用符号转储实用程序,如nm(Windows上的Linux和MinGW)或Dumpbin(Windows上的Visual Studio)和grep作为符号(如果您有一个充满库的目录,您可以制作一个脚本,为每个文件执行此操作),然后当您知道正确的库文件时,将您的代码链接到它(同样取决于平台-l

2) 如果您有所有库的源代码,您可以对函数的定义进行纯文本搜索,然后根据具有源代码的库进行链接。

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

更新

至于\uuu mingw\uvfprinf的原始问题——您将使用mingw编译的代码链接到Visual Studio,这有点奇怪,我认为您最好也在项目中使用mingw,但正如在类似主题中所建议的,这可能是由于缺少libmingwex造成的。a。如果您有MinGW工具链,请找到文件所在的位置,通过Visual Studio属性页将该目录添加到链接器搜索目录,然后添加libmingwex。a作为链接器输入,通过Visual Studio属性页或上述pragma输入到项目中。如果你没有MinGW工具链,那么你应该下载它,但你需要获得正确的平台——不过我想既然你在某处有了这个库,你就知道它是32位还是64位了。

更新2

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

 类似资料:
  • 首先,我知道这个问题在这个网站上到处都是,但是我看了几乎所有的问题,似乎找不到问题所在。这是在VS 2012中。谢谢。 这是插座。cpp公司 这是stdafx。h类 这是我的错误消息:

  • 我有一个cpp文件,其中包括: 当尝试运行AcquireCredentialsHandleW时,我得到.. MSDN说它在sspi.h中。

  • 我在我的MFC vtk项目中使用Visual Studio 2008。我收到一个链接错误,如下所示: vtkPBFEAView。obj:警告LNK4217:本地定义的符号?DrawDC@vtkMFCWindow@@QAEXPAVCDC@@@Z(public:void _thiscall vtkMFCWindow::DrawDC(类CDC*))在函数“protected:virtual void _

  • 我正在用c和visual studio进行我的第一次测试,我不知道为什么,当程序中没有出现“未解决的外部符号”时,我会遇到一个问题。 错误97错误LNK2001:未解析的外部符号"public:静态类会话*__cdecl会话::实例(无效)"(?Instance@Session@@SAPAV1@XZ)(...)\MyTest\Messages.objMyTest 错误98错误LNK2001:未解析

  • 我得到了这个错误,但我不知道如何修复它。 我正在使用Visual Studio 2013。我将解决方案命名为MyProjectTest这是我的测试解决方案的结构: -功能。H -功能。cpp -main.cpp 我是初学者;这是一个简单的程序,运行时没有错误。我在互联网上阅读并对单元测试感兴趣,因此我创建了一个测试项目: 菜单文件→新建→项目...→已安装→模板→Visual C→测试→本地单元测

  • 我想写一个调用Java方法的C程序。 我试图从C调用Java函数。如本文所述 http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/invocation.html 但我在调试时遇到这个错误,无法处理它。我正在使用Visual studio 2012。这是我的代码C代码。 安装在my comp版本上的Java是C:\Users\