C++ .lib和.dll在部署C++;Github的代码

C++ .lib和.dll在部署C++;Github的代码,c++,dll,C++,Dll,我知道.lib是静态库链接,.dll是动态的。这意味着当生成.exe时,.lib不需要存在.exe即可工作。但是,.dll需要放在正确的相对路径中,以便.exe引用和运行 我的问题是关于.lib的。将源代码上载到Github时,是否也在项目文件夹中包含.lib文件?这样做的最佳实践是什么 说明如何安装库的大部分教程使我们将.lib文件链接到其原始文件夹,并将.dll文件移动到工作项目文件夹中。那么,我是否也应该将.lib文件移动到我的项目文件夹中?如果我不这样做,这意味着下载我的源代码的人必须找

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

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


说明如何安装库的大部分教程使我们将.lib文件链接到其原始文件夹,并将.dll文件移动到工作项目文件夹中。那么,我是否也应该将.lib文件移动到我的项目文件夹中?如果我不这样做,这意味着下载我的源代码的人必须找到相应的.lib文件来链接和编译,对吗?

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

要澄清这两个文件之间的区别

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

.dll
是一个动态库。。。“动态”是指应用程序(和其他DLL…)可以在运行时加载和卸载它。(Windows程序启动器还自动加载它正在启动的任何程序直接或间接引用的所有DLL。)

.dll
是“要么全有,要么全无”。您可以在运行时完整地加载它们<相反,code>.lib是真正的库,仅由链接器使用


=编辑:下一个答案,IMHO,“搞定了。”

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 make安装& make <代码> >,这需要配置的MaFo文件来说明这些是在项目能够建立之前需要发生的事情。
<>个人C++的依赖性管理很差,但可能会产生一些负面的反应,我只说C/C++中的依赖管理不是我的最爱,对于大多数内部软件或小的使用,我仍然会用代码提交LIB。如果有一个包含lib文件的公共存储库,在调用gcc编译器之前,您可以在构建过程中生成makefile/Cmake to
curl
wget

您的问题标题是关于部署的。您的问题主体是关于将内容上载到github。这是怎么一回事?部署或源代码管理?“如果我不这样做,这意味着下载我的源代码的人必须找到相应的.lib文件进行链接和编译,对吗?”如果他们正在编译你的代码,他们可以自己获取库(例如,通过他们环境的包管理器)并在构建过程中编译或链接到它。分发别人的图书馆不是你的责任,也不完全是这样。如果您在运行时不需要该库,则可以使用.lib来描述运行时所需的DLL。库可能只包含DLL的链接信息,而不包含库本身。@下划线\u我同意。我是一名nodejs程序员,nodejs程序非常简单,因为它有package.json,您只需运行npm安装。但这是C++。我自己发现下载和构建库以及链接到我的项目非常困难。我想拯救别人的痛苦:)或者拯救我未来的自己!我只想能够下载代码,用VisualStudio打开并编译@Zanko我明白你的意思,但是在盘子里提供所有东西都有缺点。例如,他们无法从环境提供的更新、补丁等中获益。我想这在Windows上不是什么问题,因为DLL地狱是一种常态,而且动态链接到使用MSYS2、Cygwin等构建的跨平台的东西会有很多麻烦,所以只要将所有DLL的快照保存到一个可重新发布的包中,通常看起来就更容易了……这就是我将作为二进制文件分发的方法。分配一半和一半有点不同/奇怪。为什么不提供一个fi