.lib和.dll在c++代码部署到Github期间
.lib and .dll during deployment of C++ code to Github
我知道。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到curl
或wget
,作为构建过程的一部分。
- 使用调试/崩溃报告将应用程序部署到客户端
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- Qt QML相机在部署后显示白屏
- 与Visual Studios(c ++)同步时如何组织github存储库?
- WinDeployqt 不会为调试应用程序部署 Qwindowsd.dll
- CMakeLists:使用 ExternalProject 从 Github 添加源文件
- 在 Linux 上部署 Qt 应用程序
- 如何在本地测试 github CI?
- 如何使用所有依赖项部署C++项目?
- 更改用于部署的凭据提供程序 GUID 的过程
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- Qt5 部署"procedure entry point could not be located"
- 用 Python 训练神经网络并在 C++ 中部署
- 部署在张量流中训练的神经网络来火炬C++的最佳方法是什么?
- OPENCV - 如何在OpenCV中使用Haar Cascade Github xml文件?
- 部署基于 qt 的项目后,我的 sqlite3 文件不会被复制 (android)
- Qt-png图像未显示在部署应用程序中
- 从Windows 10编译VS2017在Windows 7和…上部署..找不到DLL
- 如何部署C++DLL
- .lib和.dll在c++代码部署到Github期间