【问题标题】:Preventing a C++ library from linking, past an expiration date防止 C++ 库在过期日期之后进行链接
【发布时间】:2014-01-24 08:44:51
【问题描述】:

我需要防止 C++ 静态库链接超过软件评估期的到期日期。我该怎么做?

这应该适用于最新版本的 Visual C++ 编译器(2012、2010,最好是 2008)。对更多编译器的支持将是一个优势(英特尔、gcc、游戏机编译器)。能够在到期日期前几天弹出编译器警告也是一个不错的功能。

【问题讨论】:

  • 为什么不检查每个库函数,而是在执行时检查它?
  • @DmitriChubarov 因为我们的客户是软件开发人员,我不希望他们因为忘记给我们支票而意外发布会过期的产品。
  • 到底什么过期了?我假设一个许可证,软件本身并没有真正过期。在这种情况下,运行时检查就足够了(我希望他们在发布程序之前至少运行一次)。
  • 是的,我说的是带有试用期的评估许可证。因此,假设我们的客户使用我们库的评估版本构建了一个版本。他们按原样分发它。三周后,他们接到大量来自愤怒买家的电话,称他们的产品无法运行并抱怨许可证过期。我们应该受到责备。
  • 现在我们可以仅对调试版本启用此检查,但疲惫的程序员可能会决定链接发布版本以便能够继续工作、提交并忘记它。

标签: c++ visual-c++ static-libraries


【解决方案1】:

链接器不支持执行此类检查。您将需要想出一个更好的解决方案来处理“评估期”到期的问题。

【讨论】:

  • 我可能是错的,但我想我已经看到游戏的中间件这样做了。因此我的问题。
  • 找不到任何证据,所以我猜你是对的,这是不可能的。直到有人找到方法;)
  • @Laurent 问题是“库”是一个字节块;链接器不执行代码的任何部分。它只是将它们与其他部分一起链接到一个可执行文件中。这意味着您无法阻止链接的发生。但是,您可以在库中添加代码,检查生成的可执行文件的执行日期并采取相应措施。这是否满足您的需求,我不知道。但是缺少对此类功能的链接器支持(在 imo 中,对于链接器支持来说,这将是一个愚蠢的功能)它不会发生。
  • 当然,我知道链接器是如何工作的,但我不知道这怎么可能,只是我以为我已经看到了它的作用。因此,我的问题,你永远不知道,微软可能出于某种原因支持这一点。我想确定是否是这种情况。有时听起来很愚蠢或不可能的事情实际上是非常真实的;)
【解决方案2】:

我不确定你的意思。库本身不包含评估期(至少不是简单格式)。 一个肮脏的解决方案是编写一个重命名影响静态库的脚本。然后编译器不能链接到它。 据我记得支持 VS(并且肯定是 make)在编译之前运行脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多