.lib和.dll在c++代码部署到Github期间

.lib and .dll during deployment of C++ code to Github

本文关键字:部署 Github 期间 代码 c++ dll lib      更新时间:2023-10-16

我知道。lib是静态库链接和。dll是动态的。这意味着,当.exe生成时,.lib不需要存在即可使.exe工作。但是,.dll需要放在正确的相对路径中,以便.exe引用和运行。

我的问题是关于.lib的。上传源代码到Github时,我是否也在项目文件夹中包含.lib文件?这样做的最佳实践是什么?

大多数展示如何安装库的教程都让我们将。lib文件链接到其原始文件夹,并将。dll文件移动到工作项目文件夹中。那么我是否应该将。lib文件也移动到我的项目文件夹中呢?如果我不这样做,这意味着下载我的源代码的人将不得不找到相应的。lib文件链接和编译,对吗?

我自己的"IMHO答案"是:"GitHub关心的是源代码代码。"因此,我不建议在那里包含二进制.lib文件。而且,我可能也不会在那里放二进制.dll文件。

为了澄清两个文件之间的区别…

.lib文件是一个目标代码库,由以前的编译产生,现在可以被链接器引用。链接器将选择它需要的,然后这些项目从库中复制到它当时可能正在构建的任何项目中。

A .dll是一个动态库…"动态"是指应用程序(以及其他dll…)可以在运行时加载和卸载它。(Windows程序启动器也会自动加载它正在启动的任何东西直接或间接引用的任何dll)

.dll的意思是"要么全有,要么全无"。在运行时完整地加载它们。相比之下,.lib是真正的库,仅供链接器使用。

= = = 编辑:回答,恕我直言,"钉。"

Git repos是关于代码的,你不应该在你的Git repos中有二进制文件。

然而,github有一个叫做发布的功能,它允许你上传二进制资源和标记的源代码版本。

您的问题实际上是关于依赖管理的。与。lib或。dll无关,这些只是不同类型的依赖关系。你的问题是,如果有人克隆我的存储库,他们如何构建它?

答案是你需要一个构建脚本,makefile, rakefile, jake文件等…用户可以运行它来进行构建。例如,这可能是一个自述文件,上面写着:"去X网站下载你需要的文件"。或者,您也可以按照建议将必要的依赖项放在存储库中。这在法律上并不总是被允许的,因为它被认为是"再分配"。最好的方法是使用某种依赖管理。根据您使用的语言,有不同的依赖项管理解决方案。我建议只使用公共依赖库中的库(.dll, .lib, .tar, .*)。

在Java中,推荐的方法是使用maven。Ruby有gems, node.js有npm包。这只不过是一个包含依赖项列表的文件,以及一个知道如何检索它们的工具。构建我的库就像运行一样简单npm install && node make.js上面说运行nodejs包管理器(依赖管理器)下载所有必要的文件,然后运行构建脚本。

对于c++,它可以是像make install && make这样的东西,它需要你配置一个makefile来说明这些是在项目可以构建之前需要发生的事情。

就我个人而言,c++的依赖管理很差,但这可能会导致一些负面的反应,我只想说C/c++的依赖管理不是我最喜欢的,对于大多数内部软件或小用途,我仍然会用你的代码提交库。如果有一个公共存储库包含你的lib文件,你可以在调用gcc编译器之前生成一个makefile/Cmake到curlwget,作为构建过程的一部分。