c - 将静态库与具有相同原型但用途不同的函数链接
问题描述
我处于一个奇怪的情况,我需要两个函数,具有相同的原型,在我的程序中服务于不同的目的。
我的程序引用了 GNU 的二进制文件描述符包中的函数libbfd.a
,它是从binutils
. 我需要两个libbfd.a
用于两个目标(例如 ARM 和 RISC-V)。显然,在这两个 ' 的副本中libbfd.a
,会有很多函数具有相同的原型(因为它们是从相同的 生成的binutils
),但服务于不同的目的(因为它们的目标不同)。
我不能简单地将我的程序与这两个链接libbfd.a
。我的最终程序中只包含了一个函数副本,因为...
静态库的主要特点是符号索引允许您仅链接那些
libbfd.a
提供缺失符号的成员。
我无法将静态库分解为目标文件。链接时会multiple definitions of ...
出错。
无论哪种方式,函数的两个副本都不能同时存在于我的程序中。
最终,这种情况是否有一个优雅而简单的解决方案?
解决方案
这种情况有一个优雅而简单的解决方案吗?
解决方案:
- 编写 2 个在客户端-服务器架构中工作的程序。运行两台服务器,每台服务器与不同的静态库风格链接并在不同的套接字上侦听。客户端做这项工作,当他想要对特定风格的工作进行工作时
bds
,他会调用其中一个服务器来完成工作。
您可能会推出自己的协议或研究一些现有的RPC并使用protobuffers或类似的东西。
编译
libbfd.a
成一个共享库并用于dlopen
单独引用每个共享库风格。用于
objcopy
重命名一个静态库中的所有符号,并为您自己的头文件提供重命名的符号并正常链接。
我无法将静态库分解为目标文件。
静态库是目标文件的存档。您始终可以将其解压缩为目标文件。
推荐阅读
- java - 高级json字符串到java对象的处理和转换
- java - 有没有办法在测试中选择性地禁用对实体修改的审计?
- python - 如何以特定顺序依次运行包含测试套件的不同脚本文件
- hibernate-search - 从独立索引中删除,不会反映将已删除实体用作@IndexedEmbedded 的索引
- junit - 如何使用 Junit 测试套件仅重新运行失败的测试用例
- javascript - 如何从网页中获取文件目录
- amazon-web-services - 发电机数据库上的分区键
- php - 解码 Cookies 值并将数据保存在数据库中
- python - 如何为 python 配置 Google Cloud Platform Data Loss Prevention 客户端库以在 SSL 代理后面工作?
- node.js - 如何在 addFields 聚合中使用正则表达式与 mongodb