如何排除故障:对“非虚拟 thunk to ...”的未定义引用

2023-12-27

我正在尝试找出如何进一步解决此问题。我还想知道如何安装更新版本的 ld 如果有意义的话。所有参与的包管理器都告诉我我是最新的。

该代码在 ubuntu 12.04 和 12.10 上使用 g++ (4.7.2) 进行编译、链接和运行,但在 FC17 上编译失败并出现此错误。

ArchiveServiceLib/debug-posix/libArchiveLib.a(NamedIflTiffCache.o):(.rodata._ZTV26UnlockingGenericFileHandle[_ZTV26UnlockingGenericFileHandle]+0x58): undefined reference to `IHawk::EncryptedHandle::OnNewSecretKey(IHawk::IHPGP::SecretKey&)'
ArchiveServiceLib/debug-posix/libArchiveLib.a(NamedIflTiffCache.o):(.rodata._ZTV26UnlockingGenericFileHandle[_ZTV26UnlockingGenericFileHandle]+0x8c): undefined reference to `non-virtual thunk to IHawk::EncryptedHandle::OnNewSecretKey(IHawk::IHPGP::SecretKey&)'

ld 的版本:

12.04 only reports          2.22   (no indication other than 2.22)
12.10 reports               2.22.90.20120924
fedora17 reports            2.22.52.0.1-10.fc17 20120131

g++ 的版本:

Ubuntu 12.04    (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Ubuntu 12.10    (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
FC 17           (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)

包含此方法的所有类的声明如下:

../Include/IHawkLib/IHPGP.h:            virtual bool OnNewSecretKey( SecretKey &skey ) = 0;
../Include/IHawkLib/PgpPkidParser.h:            virtual bool OnNewSecretKey( SecretKey &skey )                  {return true;}
../Include/IHawkLib/EncryptedFileHandle.h:              virtual bool OnNewSecretKey( SecretKey &skey );

但这就像 g++ 忘记将虚拟部分传递给 ld 以便它可以在 link/ld 时解析它。这似乎在 2002 年和 2009 年就发生过,也许还发生过几次,但在这种情况下,后来的版本似乎已经解决了这个问题。这一次,它似乎是特定于平台的,考虑到它所不满意的代码,这是没有意义的。

构建错误来自的用法是:

    std::auto_ptr<IHawk::EncryptedFileHandle> apTmgHandle (GetFileHandle(filename, true, false, pKeyServer));
    if (apTmgHandle.get()){

类派生如下:

class EncryptedFileHandle : public EncryptedHandle {
....
    // Does not mention OnNewSecretKey
....
}

class EncryptedHandle : public IHawk::GenericHandle, protected IHawk::IHPGP {
....
    virtual bool OnNewSecretKey( SecretKey &skey );  // Has a concrete implementation
....
}

class IHPGP {
....
    virtual bool OnNewSecretKey( SecretKey &skey ) = 0;
....
}

class GenericHandle {
....
    // Has no clue about OnNewSecretKey
....
}

链接器命令在所有平台上看起来都是这样的,我们正在使用 scons 并且到目前为止已经能够与平台无关......(抱歉,长线,只是不想冒因拼写错误而搞砸的风险:

g++ -o debug-posix/ArchiveService -g debug-posix/StdAfx.o debug-posix/ArchiveService_PosixMain.o debug-posix/WebCommands.o -L/usr/local/lib -L/usr/lib/mysql -L/home/mjones/C++/ifl/src/IHDB/debug-posix -L/home/mjones/C++/ifl/src/IHDB -L/home/mjones/C++/ifl/src/XMLib/debug-posix -L/home/mjones/C++/ifl/src/XMLib -L/home/mjones/C++/ifl/src/IHawkLib/debug-posix -L/home/mjones/C++/ifl/src/IHawkLib -L/home/mjones/C++/ifl/src/ImageCore/debug-posix -L/home/mjones/C++/ifl/src/ImageCore -L/home/mjones/C++/ifl/libraries/z39.50/ZExtensions/debug-posix -L/home/mjones/C++/ifl/libraries/z39.50/ZExtensions -L/home/mjones/C++/ifl/src/ServerGuts/debug-posix -L/home/mjones/C++/ifl/src/ServerGuts -L/home/mjones/C++/ifl/libraries/CRUSHER/debug-posix -L/home/mjones/C++/ifl/libraries/CRUSHER -L/home/mjones/C++/ifl/libraries/jsoncpp/debug-posix -L/home/mjones/C++/ifl/libraries/jsoncpp ArchiveServiceLib/debug-posix/libArchiveLib.a -lIHDB -lXMLib -lIHawk -lImageCore -lZExtensions -lServerGuts -lCrusher -ljson -lboost_filesystem-mt -lboost_thread-mt -lboost_regex-mt -lz -lMagickWand -lcrypto++ -lcppunit -llog4cplus -lyaz -lpodofo -lmysqlclient -lxerces-c -ljpeg -lpng -ltiff

解决问题的第一步是找到问题所在IHawk::EncryptedHandle被定义为。这可以使用以下方法完成nm在目标文件上,例如:

nm -po *.o | c++filt | grep IHawk::EncryptedHandle | grep -v ' U ' | less

如果定义来自库,则可以添加相应的库或使用*.a and *.so在适当的目录上。一旦符号被定位并位于库中(由于未定义的引用来自库,因此丢失的符号也可能在库中),您需要确保在之后指定了缺少符号的库引用它的人。我已经有一段时间没有看到这种情况发生了,但是如果该符号来自同一个库,您可能需要运行ranlib在图书馆上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何排除故障:对“非虚拟 thunk to ...”的未定义引用 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • iOS 5.0 警告:找不到 Delegate 的协议定义

    我有自定义 UIView 类 GestureView 我有一个此类的前向声明 它是下面的代表 我已将 GestureView h 导入到 m 文件中 这工作正常 但 iOS 给出警告消息 找不到 GestureViewDelegate 的协
  • 在 Angular 2 中保留页面重新加载的数据

    在我的 Angular 2 应用程序中 我将一些数据从 HomeComponent 传递到 PageComponent 然后将其保存到 PageComponent 内的变量中 现在 当我刷新页面时 我需要保留这些数据 目前我正在使用会话存储
  • 如何将变量从 C# 传递到 javascript?

    希望将变量从 c 传递到 javascript 以使用一些 jquery 代码 传递双精度数 整数 字符串 数组 有谁知道如何做到这一点 例如 如果我在 C 中有以下代码片段 string blah this is a blah strin
  • 如何在没有静态 IP 的情况下远程访问本地 Web 或数据库服务器

    我如何在没有静态 IP 地址的情况下远程访问本地 Web 服务器或数据库服务器访问 我有桌面数据库驱动的应用程序 该应用程序将数据保存在 MS SQL Server 中 我想访问在 bluehost 上托管的公司当前网站上的数据 有什么方法
  • 在 jQuery 后台拉取 HTML 资源

    在一个页面上 有一个按钮 单击该按钮时 会出现一个下拉菜单 下拉列表包含一个图像 问题是在用户单击按钮之前不会获取图像 my button click function my dropdown html img src 我想在页面加载时获取
  • 如何创建 PSObject 对象的新克隆实例

    我想创建自定义 PSObject 的新实例 我有一个创建为 PSObject 的 Button 对象 我想创建一个新对象 Button2 它具有与 Button 相同的成员 但我找不到一种方法如何克隆原始对象而不在原始对象中引用它 如果我更
  • 使用winapi查找进程ID和基地址

    我正在 Code Blocks 中编写一个程序 它会简单地打印应用程序的进程 ID 和基地址 PID 找到正确 但我在基地址方面遇到困难 而且我正在使用 GNU GCC 编译器 x64 我的猜测是错误在于HANDLE hSnap Creat
  • MySQL 数据库中字符的 UTF-8 问题(例如 é 为 é)

    我知道有数百个关于 UTF 8 问题的问题 但我尝试了所有能找到的方法 但没有一个有帮助 事实 我正在尝试读取一个包含 从我的 MySQL 数据库并将其显示在 PHP 页面上 实际上 它确实显示为 但字体无法识别它 因此使用另一种默认字体
  • 将 emacs(aquamacs) 与 python 3.2 一起使用

    mac osx Snow leopard 上的默认 python 版本是 python 2 6 1 我正在学习 python 3 所以我必须更改解释器 我已经更改了偏好设置 以便它指向 Library framework python fr
  • 在android中使用Activity的有效方法是什么

    我只是想问什么是有效的使用活动的方式 意味着将一项活动用于多种功能 或者将多项活动用于每种功能 在我的应用程序中 工作类似于类别 gt 子类别 gt 产品列表 其中方向改变设计并且还需要消耗以前的功能状态用于返回 Thanks 根据活动文档
  • Selenium 等待 Ajax 内容加载 - 通用方法

    Selenium 是否有一种通用的方法来等待所有 ajax 内容加载完毕 不绑定到特定网站 所以它适用于每个 ajax 网站 您需要等待 Javascript 和 jQuery 完成加载 执行 Javascript 检查是否jQuery a
  • 从 URI 获取图像宽度和高度

    是否可以从图像文件的 URI 获取其宽度和高度 我试图使用这段代码 但出现了错误 getAbsolutePath 之后有语法错误 标记 上存在语法错误 ArgumentList 无效 private void getDropboxIMGSi
  • Iphone 上的 OpenGL ES - 显示和旋转 3D 对象

    我是 Iphone Xcode 和 openGL ES 的新手 我正在寻找一个源代码示例 演示如何创建 3D 对象 用手势旋转它以及放大 缩小 谢谢 亚历克斯 以下是如何显示和旋转使用 Blender 创建的 3D 模型的简单示例 http
  • nextjs链接组件插值错误

    我在 Next js 中收到此错误 错误 提供的 href subject subject 值缺少要正确插入的查询值 subject 阅读更多 https err sh vercel next js href interpolation f
  • 使用 static const 结构对相关的类常量进行分组 (C++11)

    使用以下 A 的缺点是什么 h class SomeClass static const struct ConstantGroup int a 1 string b b etc CONSTANT cpp const SomeClass Co
  • 如何在android中的视图上方添加阴影

    我有一个观点 那就是作为页脚标题来服务 它只是一个视图 您可能会将其视为按钮 文本视图或布局 我对任何事物都持开放态度 这是 XML
  • Ruby 类:初始化 self 与 @variable

    有人可以解释在定义类时初始化 self 和使用 variables之间的区别吗 这是一个例子 class Child lt Parent def initialize self stuff self stuff stuff super en
  • 如何安装 Six.moves.xmlrpc_client?

    我正在从 openstack 复制一些代码片段 但是当它运行时 import six moves xmlrpc client as xmlrpclib 我收到以下错误 import six moves xmlrpc client as xm
  • ItemizedOverlay 和 Overlay 类之间的区别

    有人可以告诉我何时使用 Overlay 或何时使用 Itemized Overlay 类 这两个类有什么区别 绘制方法做同样的事情吗 我可以在我的项目中仅使用 ItemizedOverlay 类吗 或者我必须使用 Overlay 作为基类
  • 如何排除故障:对“非虚拟 thunk to ...”的未定义引用

    我正在尝试找出如何进一步解决此问题 我还想知道如何安装更新版本的 ld 如果有意义的话 所有参与的包管理器都告诉我我是最新的 该代码在 ubuntu 12 04 和 12 10 上使用 g 4 7 2 进行编译 链接和运行 但在 FC17