限制链接对象的全局符号的范围

2024-01-05

我的存档文件中有一个 C 库,clib.a。我已经为它编写了一个 C++ 包装器,cpp.o,并想将其用作静态库:

ar cTrvs cppwrap.a clib.a cpp.o

链接到此的代码将无法使用来自的内容clib.a直接,除非包含正确的标头。然而,如果有人巧合地创建了一个合适的原型——例如void myCoincidentallyNamedGlobalFunction()- 我很关心which的定义myCoincidentallyNamedGlobalFunction将会应用。

由于符号来自clib.a只需要在cpp.o,并且没有任何链接到cppwrap.a,有没有办法完全隐藏它们,这样就不会发生冲突(所以即使包含 clib 头也会失败)?


您可以手动删除最终组合库中不需要的符号:

$ objcopy -N foo cppwrap.a(删除符号)

或者,如果您需要符号但想确保外部用户无法访问它们:

$ objcopy -L bar cppwrap.a(本地化符号)

或者,如果一个符号clib.a must被某物可见cpp.o但你不希望它被其他人使用:

$ objcopy -W baz cppwrap.a(弱化符号)

在这种情况下,与其他目标文件/库中的符号的冲突将推迟到它们的使用,即使该符号仍然可见。为了进一步模糊事物或减少甚至是恭敬的碰撞的机会,您还可以使用:

$ objcopy --redefine-sym old=new cppwrap.a

An 匿名命名空间在某些情况下可能会有所帮助,但如果您的包装器需要某些功能但试图对外部用户隐藏,则不会。

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

限制链接对象的全局符号的范围 的相关文章

  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • MVC 中的 Blazor:组件被渲染,但 @onclick 不起作用。连接问题

    我正在尝试在 net core 3 MVC 项目中使用 Blazor 我使用了一些教程来做到这一点 例如https fizzylogic nl 2019 08 18 integrating blazor in an existing asp
  • 是否可以通过引用以基类作为参数的函数来传递派生类

    假设我们有一个抽象基类IBase使用纯虚方法 接口 然后我们推导出CFoo CFoo2来自基类 我们有一个知道如何使用 IBase 的函数 Foo IBase input 这些情况下通常的场景是这样的 IBase ptr static ca
  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • 使用 pthread_cond_signal 优雅地终止线程被证明是有问题的

    我需要发射一堆线程 并希望优雅地将它们拉下来 我正在尝试使用pthread cond signal pthread cond wait实现这一目标 但遇到了问题 这是我的代码 首先是thread main static void thrma
  • 通过 EUSART PIC18F45K80 打印消息

    我正在尝试向 Docklight 发送串行消息 但始终收到空值 我正在使用带有 XC8 MPLAB X 的 PIC18F45K80 我的代码中的所有内容似乎都是正确的 但我想我错了 我该如何修复它 include
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • Math.Sin、Math.Cos 和 Math.Tan 精度以及正确显示它们的方法

    我正在用 C 编写一个计算器 textBoxResult是一个文本框 我在其中显示数字 recount是以度为单位获取角度并以弧度为单位返回的函数 我的角度是从texBoxInput public double recount int nu
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • 如何从 Function App 设置会话 ID 或创建自定义字段到 Application Insights

    功能应用程序如下 public static async Task
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • 您的 C++ 程序中是否仍然存在内存分配失败问题 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在为公司写一些指导方针 我需要回答一些棘手的问题 这一项是相当困难的 解决方案可以是 根本不跟踪 确保使用 new 分配对象 这会在分配失败
  • 在标准 C 中将 int 转换为 string

    我是 C 新手 我正在寻找一个可以调用函数进行转换的示例int串起来 我发现itoa但这不是标准 C 的一部分 我还发现sprintf str d aInt 但问题是我不知道所需的 str 的大小 因此 我如何传递输出字符串的正确大小 有多
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用

随机推荐

  • FFmpeg 用于根据参考日期标记视频时间

    我正在尝试使用在视频中标记时间戳drawtext筛选 FFmpeg 可以轻松标记时间戳localtime gmtime甚至PTS 但是 我想为时间戳指定一个参考时间 开始时间 以表示视频播放的时间recorded 未编码 阅读文档 我发现了
  • 我可以在同一活动中使用兼容的操作栏和片段吗?

    好的 我已经将我的活动扩展到 extends ActionBarActivity 我的主菜单页面 extends FragmentActivity 当我将其更改为扩展 ActionBarActivity 以便我可以在主菜单上看到我的操作栏标
  • 如何使用前缀和每个实体的单独序列来实现 IdentifierGenerator

    我已经按照 Vlad 的基本指南来实现前缀生成器 但遇到了麻烦 目标是同时拥有 每个实体都有单独的序列 我通过注释定义的前缀 GenericGenerator我猜 所有序列都会在每次应用程序重新启动时删除并创建 重新部署 无论如何 hibe
  • 如何微调 HuggingFace BERT 模型进行文本分类 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有逐步解释关于如何微调 HuggingFace BERT文本分类模型 微调方法 有多种方法可以针对目
  • 我怎样才能在 Perl 中 sprintf 一个大数字?

    在 Windows 32 位平台上 我必须读取一些数字 这是出乎意料的 它们的值可以大到 99 999 999 999 但不能再大了 尝试去sprintf 011d myNum 它们输出溢出 2147483648 我无法使用 BigInt
  • 例如,查找下周一 6:00 的 Java 日期

    我正在尝试用 Java 创建一些代码 其中有人可以确定指定的一周中下一个重复时间的日期 这很难解释 所以我举个例子 假设现在是 3 月 1 日 星期四 用户想知道下周六 5 00 是什么时候 代码应该输出 3 月 3 日 5 00 作为日期
  • Swift 字典荒谬的内存使用情况

    我在我的一个应用程序中遇到了一个有趣的问题 当访问一个Dictionary很多时候 我的应用程序的内存使用量在几秒钟内飙升至超过千兆字节 这是一些示例代码来显示该问题 override func viewDidLoad let dictio
  • 如何从asp.net aspx页面获取当前页面源

    您好 我正在尝试使用 asp net 应用程序获取当前页面源 我找到了一段将 html 转换为 pdf 的代码 但为了将我的页面转换为 pdf 我需要获取该页面的 html 代码 我怎样才能将它们作为字符串获取 我的简单代码是这样的 str
  • 如何绘制复杂的多边形?

    我正在从 GIS 数据库读取数据并使用 mpl toolkits basemap 和 matplotlib 创建地图 一些数据创建复杂的多边形 由外环和内环定义 但是 我无法找到如何创建带孔的多边形 这对于 matplotlib 来说是可能
  • Android:我丢失了 Android 密钥存储,我该怎么办? [复制]

    这个问题在这里已经有答案了 基于我的 android 密钥库 我创建了一些应用程序 现在 我想更新我的一个程序 但我丢失了我的密钥库 我可以生成另一个并更新我的应用程序吗 Thanks 您可以创建一个新的密钥库 但 Android Mark
  • 如何自定义 ckeditor 工具栏

    我正在使用ckeditor 想要自定义工具栏和文本输入区域 因为两个句子之间的间隙很大 我无法找到应该进行更改的toolbar js 或config js 我如何自定义以上两者 索纳尔的答案本身并没有错 但是不涉及CKEDITOR FCK编
  • 使用枚举作为 id

    使用JPA 我们可以定义一个枚举作为实体的id吗 我尝试过以下方法 public enum AssetType Entity IdClass AssetType class public class Adkeys private Asset
  • 如何验证一组单选按钮?

    我有一个在线调查 我正在使用 jquery 验证 因此每个问题有 4 个选项 其中每个选项都是一个单选按钮 当我构建 jquery 验证规则时 我应该如何引用它们 每个问题选项都有一个 ID 和名称 以下是我到目前为止正在做的事情 但它不起
  • 数据框未在 Pycharm 中显示

    我正在使用 PyCharm 2016 2 1 当我尝试通过调试器中新添加的功能 View as DataFrame 查看 Pandas 数据帧时 这对于小型 例如 4x4 DataFrame 来说按预期工作 然而 当我尝试查看约 10 00
  • 寻找类似于 Accordion 的 JQuery 插件,但允许同时打开多个部分 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望有一个类似于 JQUERY Accordion 插件提供的 UI 元素 但允许用户同时打开多个部分
  • Foldl 和 Foldr 如何工作(以示例为例)?

    好吧 我是计划 球拍 lisp 的新手 我正在练习创建自己的函数 语法和递归 所以我想制作自己的函数 语法和递归foldl and foldr完全执行预定义版本功能的函数 我无法做到这一点 因为我只是不明白这些功能是如何工作的 我在这里看到
  • 在 IIS 7 中使用 myfakesite.com 而不是 localhost

    我按照以下步骤操作 我所做的是编辑这个文件 C Windows System32 drivers etc hosts 我添加了一行 127 0 0 1 myfakesite com 然后我进入 Facebook 编辑应用程序页面 特别是 网
  • xslt 将所有节点复制到变量

    如何将包含一组节点的另一个变量的副本分配给变量 这是我的代码
  • 我可以避免向未登录的客户端提供所有js吗?

    在构建 Meteor 应用程序时 是否可以在用户通过身份验证之前不向客户端提供 加载所有生成的 JavaScript 如果没有人能看到我的模板 模型 助手等 我会更高兴 澄清 这并不是要把东西放在 server 下 或者用 pub sub
  • 限制链接对象的全局符号的范围

    我的存档文件中有一个 C 库 clib a 我已经为它编写了一个 C 包装器 cpp o 并想将其用作静态库 ar cTrvs cppwrap a clib a cpp o 链接到此的代码将无法使用来自的内容clib a直接 除非包含正确的