对象文件(.o)vs单个文件库的头文件?

时间:2017-06-12 20:05:07

标签: c++ compilation static-libraries

假设我的库只是一些整齐地放入1个文件并且不需要任何外部依赖性的函数。那么在将该库编译成.o目标文件并以这种方式分发它而不是仅仅将其作为头文件提供时,是否存在任何优点?我似乎无法想到,尽管我只是一个初学者。

如果在使用目标文件方面有优势,是否有理由将该单个目标文件打包到存档(.a)中,而不是单独分发目标文件?

3 个答案:

答案 0 :(得分:3)

对于像这样的小型库,在.o文件中实现它实际上没有任何优势 - 无论如何你也必须提供一个头文件。对于较大的库,事情变得不那么明显了 - 链接目标代码通常比编译大量的C ++文本更快,然后你必须链接它们,但另一方面,只有标题文件使用和分发更方便。 / p>

答案 1 :(得分:2)

区别在于(单个目标文件或多个文件),库链接机制允许您指定链接器自动找到这些文件的路径,而不能为单个目标文件执行此操作。

因此,如果您的库只包含一个或多个目标文件,则无关紧要 提供图书馆将是正确的方法。

  

并以这种方式分发而不是仅仅将其作为头文件提供?

如果你能在单个标题中提供所有实现,那么这是最好的选择。

答案 2 :(得分:2)

唯一的“优势”是,如果您不想让您的客户端访问您的源代码实现,而只是想提供带有函数原型+二进制对象的头文件。

如果你对客户看到你的实现很好,那么一个只有头的库可以是一个很好的解决方案。