【问题标题】:Hiding implementation using lib and dll files?使用 lib 和 dll 文件隐藏实现?
【发布时间】:2011-12-30 17:24:14
【问题描述】:

在 C++ 中,什么是 .lib 和 .dll 文件,它们是如何创建的,它们是一种让用户无需实际拥有这些文件即可访问在 .cpp 文件中实现的功能的方法吗?

特别是,我编写了一些代码,其中包含一些我想提供给其他人使用的类,但我不想给他们包含我的实现的 .cpp 文件。

PS:我正在使用 CodeBlocks。

【问题讨论】:

标签: c++ deployment dll


【解决方案1】:

Lib 和 dll 文件是以通常的方式创建的库,带有特殊的编译器开关来告诉你想要什么样的输出文件。

lib 文件是一个静态库,它在链接时与您的主 cpp 程序链接一次,以生成一个独立的 exe 文件,无需其他任何东西即可运行。每次加载应用程序时,一个 dll(动态链接库)与您的主 cpp 应用程序链接,因此是“动态的”。不,用户无法从这两种库中的任何一种中获取您的 cpp 源代码。 lib 文件类似于 Linux/Unix .a 文件; dll 类似于 Linux/Unix .so 文件。

您的源代码是完全安全的,但有一个例外:

任何可用于主 cpp 应用程序的全局变量名称或函数名称都以文本形式存在于 lib 文件和 dll 中。如果检查一个 lib 文件或 dll,他可以以纯文本形式看到这些全局名称和函数名称:只有名称本身——只有名称,仅此而已。

您的来源非常安全。如果动态链接,您将给出您的 exe 文件和 dll;或者只是静态链接的exe,如果我是你,这将是我的偏好。

我认为我这样说是正确的。如果我不是,我相信 SO 上的某个人会很乐意告诉我这一切:-)

HTH

【讨论】:

  • @Ben,你会编译一个 lib 文件,如果有人想用你的库写东西,他们必须链接它。您还提供了一些头文件,让开发人员知道函数接受/返回的参数,例如。
  • 大卫的回答是回应:我想做的是让某人能够使用我的课程,但没有我的 .cpp 文件。我不想给他们任何可执行文件,只是给他们类,以便他们可以使用它们来构建自己的可执行文件。比如说,有人要造一辆汽车,我就去,嘿,用我的收音机,它有播放和暂停音乐的方法!自己拥有一个用于carradio的exe是毫无意义的,因为它只在某人的汽车中才有意义。那我该怎么做呢?
  • @David 谢谢,这有助于我的理解!现在有人可以解释一下,我如何为 CodeBlocks 项目编译一个 lib 文件?
猜你喜欢
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多