混合 C++ ABI 以针对遗留库进行构建

2024-01-19

情况是这样的,我有一个使用最新 GCC (4.3.3) 的 C++ 代码库,但我需要链接到使用 GCC 3.2.3 构建的旧库。该库没有可用的新版本,我不能没有它,而且它是闭源的,因此无法重建。

这似乎造成了一个问题,因为 GCC 4.3.3 和 3.2.3 之间存在 ABI 不兼容,所以我试图看看我有什么选择来解决这个问题。

一些额外的细节:

  • 我可以使用 -fabi-version=1 重建代码库中的所有内容以获得正确的 ABI 版本,但我依赖于 libstdc++ 版本 6 中的一些新功能。
  • 代码库之外的所有 C++ 库依赖项都是开源的,因此我可以根据需要重建它们,除了这个库之外。
  • 许多 C 库依赖项无法重建或难以重建。
  • 旧库似乎依赖于某些 libstdc++ 版本 5 功能

到目前为止我已经尝试过:

  • 使用 -fabi-version=1 重建所有 C++ 代码和依赖库,并链接到 libstdc++ 版本 6。这会失败,并出现一些 C++ 标准库符号未定义的符号错误。
  • 与上面相同,但另外链接到 libstdc++ 5 的共享库,这解决了链接器问题,但似乎会导致在运行时在遗留库内混合两个版本,从而导致崩溃。

我读了这一页:http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html这似乎表明可以在应用程序中混合 C++ ABI 版本以满足库之间不同的依赖关系。不过,除非我遗漏了一些东西,否则它在这里似乎不太有效。

有任何想法吗?


好的,您的解决方法是:

  • 为旧的 C++ 库编写一个“C”接口,使用 3.2.3 进行编译,这样它就可以工作了。
  • 现在您可以在新编译器中使用 C 接口。

您可以围绕 C 库编写一些 C++“包装器”代码,以便将其用作 C++,但该代码将在新编译器中构建。

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

混合 C++ ABI 以针对遗留库进行构建 的相关文章

  • Azure 搜索 .NET SDK 自定义分析器

    没有太多背景 这是我的问题 要使用 C 中的 NET SDK 创建新的 Azure 搜索索引 使用文档中提供的酒店示例 我的代码如下所示 public class Hotel System ComponentModel DataAnnota
  • 无法从 GetProcessId(.. hWnd) (pInvoke) 中提取 processID

    我使用以下方法 DllImport kernel32 dll SetLastError true static extern int GetProcessId IntPtr hWnd 尝试获取正在运行的进程的 processId 我拥有的唯
  • 编辑 CMakeLists.txt 以使用 -fPIC 进行编译

    我正在尝试为名为 libnifalcon 的 NOVINT Falcon 安装驱动程序 我使用 cmake 创建 make 文件 但是当我运行 make 时出现错误 Linking CXX shared library lib libnif
  • 如何在 Visual Studio 2017 项目(新的 .csproj 文件格式)中设置“OutputPath”,而不会使目标框架扰乱解析的路径?

    Setting OutputPath在新的 Visual Studio 2017 项目格式中 会自动在路径中添加目标框架 例如 如果我在项目文件中设置了这些
  • .NET类设计问题

    我有一个名为 Question 的类 它有一个名为 Type 的属性 基于这种类型 我想以特定的方式将问题呈现为html 多项选择 单选按钮 多个答案 复选框等 我从一个 RenderHtml 方法开始 该方法根据问题类型调用子方法 但我认
  • 迭代时跳过相同的多重映射值

    有没有什么好方法可以实现下面所需的输出 而不必删除相同的值或创建另一个列表 向量等 我正在尝试将不同文档中找到的单词映射到其文档名称 如所需输出中所示 include
  • 窗口的打开事件和窗口句柄

    如何从刚刚打开的 Outlook 窗口获取窗口句柄 IntPtr OutLook Items items oFolder Items foreach OutLook MailItem mail in items mail Display I
  • 如何在WPF中使用Application.Exit事件?

    我需要删除一些特定文件 然后用户关闭 WPF 中的程序 所以我从这里尝试了 MDSN 代码http msdn microsoft com en us library system windows application exit aspx
  • pthread_join() 中的阻塞

    根据手册页 pthread join 函数应暂停调用的执行 线程直到目标线程终止 除非目标线程 已经终止了 因此 据我了解 调用进程将阻塞 直到指定的线程退出 现在考虑以下代码 pthread t thrs NUMTHREADS for i
  • std::线程构造和执行

    我在 中找不到任何信息文档 http en cppreference com w cpp thread thread thread是否能保证线程对象构造完成后线程实际上正在运行 换句话说 是否可以保证线程构造函数完成后线程函数已经被执行 一
  • Web API 获取多部分/表单数据响应的最简单方法

    我有问题 但我看不到我做错了什么 我想用最简单的方法来让它工作 稍后我会让它变得更复杂 但目前只想命中 post 方法 我什至不关心里面的代码当前是否正在工作 我唯一关心的是它会发回 OK 200 回复 目前 我要么收到内部服务器错误 50
  • 如何保护Linux中的堆内存?

    我想将一块堆内存设置为只读 为此我尝试过memalign with mprotect 但是从 memalignment 中我能得到什么 memalign 从进程堆中分配内存 我想将堆的某些部分设为只读 有什么帮助吗 malloc gt mm
  • 开源 C# 套接字 (TCP + UDP) 库 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对 NET 框架的标准套接字类感到头疼 有人可以推荐一个高效的开源 C 套接字 TCP UDP 库来处理套接字消息吗 使用 Kerry Jia
  • std::atomic 将一对原子 int32 视为一个原子 int64?

    我有一对 unsigned int32 std atomic
  • 画笔到画笔动画

    我设法找到了如何制作 WPF 动画 两种颜色之间的过渡 它被称为 ColorAnimation 并且效果很好 ColorAnimation animation new ColorAnimation From Colors DarkGreen
  • OpenGL 和加载/读取 AoSoA(混合 SoA)格式的数据

    假设我有以下 AoSoA 格式的简化结构来表示顶点或点 struct VertexData float px 4 position x float py 4 position y 也就是说 每个实例VertexData存储4个顶点 我见过的
  • 在 C 中实现逻辑右移

    我正在致力于仅使用按位运算符在 C 中创建逻辑右移函数 这是我所拥有的 int logical right shift int x int n int size sizeof int size of int arithmetic shift
  • 模板编译错误 - 没有匹配的调用函数

    我正在尝试将字符串转换为数字 为此 我找到了以下方法 include
  • 如何在 C 中将向量参数传递给 OpenCL 内核?

    我在将向量类型 uint8 参数从 C 中的主机代码传递到 OpenCL 内核函数时遇到问题 在主机中 我将数据存储在数组中 cl uint dataArr 8 1 2 3 4 5 6 7 8 我的真实数据不仅仅是 1 8 这只是为了便于解
  • 将 VBA 转换为 .NET 语言 [重复]

    这个问题在这里已经有答案了 可能的重复 是否可以将 VBA 转换为 C https stackoverflow com questions 388819 is it possible to convert vba to c 假设我有一个大型

随机推荐