【问题标题】:What is the difference between create a static library and just import the code?创建静态库和只导入代码有什么区别?
【发布时间】:2013-12-05 20:06:27
【问题描述】:

我想知道有什么区别,什么更好,用我需要的通用代码创建一个静态库,或者只是将文件导入项目。

【问题讨论】:

  • “导入”是什么意思?
  • 为什么是静态库?为什么不是动态库?​​
  • 当使用静态库时,已经编译好了 -> 构建时间更短。当使用与您的主项目一起构建的源时,您可以确保构建环境(新编译器等)中的任何更改都不会导致问题。
  • with import 我的意思是把库的源代码放在要编译的项目中。
  • 我相信要拥有动态库,我必须有一个操作系统,而在这种情况下我没有。我正在为微控系统编程。

标签: c microcontroller lpc


【解决方案1】:

使用库,您可以分发不带源代码的代码。如果您有源代码,那么您的编译器就有机会优化该代码。

“更好”取决于您的标准。

【讨论】:

  • "如果您有源代码,那么您的编译器就有机会优化该代码。" - 也有无源优化的可能。
【解决方案2】:

嵌入式项目的另一个区别是您可能希望使用不同的项目设置来编译库,这将是一个优势。但是,如果所有源都在项目中,优化器可能能够通过使用寄存器来传递变量等做更多的事情。

嵌入式编译器可能非常很糟糕,有时您必须手动提供它们。 (我记得有一个 8051 c 编译器甚至不会进行常量表达式折叠,ugh。)

【讨论】:

    【解决方案3】:

    您的意思是手动移动代码?我认为不同之处在于链接期间,编译器优化略有不同。静态库本质上是在编译期间发生的“复制暴露的代码”。

    对我来说,这更像是一种代码重用形式。另一方面,动态库更加复杂和灵活,因为函数仅在运行时调用。因此,与使用完全相同源的静态库编译的程序相比,与动态库链接的程序在二进制文件中的信息更少。前段时间我自己比较过。

    是的,Scott 在代码分发方面是绝对正确的。

    【讨论】:

    • ".. 不同之处在于链接期间,编译器优化略有不同。" - 在链接时,编译器已经完成了它的工作,由链接器来优化(例如删除未使用的代码)。
    • @Till 如果我正确地记住了我的编译器课程,那么在链接阶段也会进行优化。我的措辞不正确,应该是linker optimization
    猜你喜欢
    • 2016-08-31
    • 2010-09-25
    • 2017-08-30
    • 2013-12-12
    • 2015-04-13
    • 2011-10-09
    • 2016-08-29
    • 2013-07-21
    • 2016-10-21
    相关资源
    最近更新 更多