【问题标题】:choosing options before building libraries在构建库之前选择选项
【发布时间】:2014-07-03 06:20:36
【问题描述】:

我正准备在 debian 系统上构建 crypto++ 库,尽管 debian 存储库通过 apt-get 提供它们,但我想从源代码中完成它,以确保编译的库是最新的并仅使用某些选项进行构建.

默认 makefile 配置为构建静态库,发布构建,我想根据需要修改 makefile 并在其中添加一些其他内容。

基本上我只会将这些库用于学习,没有任何类型的发布程序,所以我的问题是我是否需要发布构建或调试来学习,我也不确定构建共享库还是静态库更好用于学习目的?

我想这个问题听起来很有趣,但我不确定我为什么需要调试库来调试简单的程序?还是自己调试库?

【问题讨论】:

  • 使用调试时,您将获得编译器提供的有关错误的更多信息。
  • 好,那么用于学习目的的共享库呢?
  • 我认为共享更适合发布,因为它们在使用它们的程序之间共享代码,而静态只是将整个库复制粘贴到您的 exe 中。开发使用静态更容易,因为你只有你的exe(更大但不指向各种共享库)
  • 这个metaphore 可能更清楚

标签: c++ makefile


【解决方案1】:

debug 和 release lib 的区别在于 debug 通常有更多的内部检查以确保您正确使用 lib,对应的是 lib 也更重和更慢。这就是为什么使用发布库完成发布构建的原因。

静态链接(复制):一个大exe文件,更方便开发。你将你使用的库的部分移动到你的二进制文件中。

动态链接(参考):一个小的 exe 文件加上一个或多个 .so/.dll 文件。您的可执行文件使用对库的引用,因此使用相同库的 X 程序仅引用该库的相同实例。它不会像静态链接那样复制代码。

【讨论】:

  • 谢谢,这正是我想知道的,.a 文件在学习时更容易处理。
  • 嗯,一开始比较容易,但是一旦你努力正确地设置你的共享库(调试/发布),它是一样的。最重要的是选择库的 **debug**/release 版本。
猜你喜欢
  • 2020-11-04
  • 2012-06-19
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多