动态库、依赖关系和分布
Dynamic Libraries, dependencies and distribution?
在我开始开发更多的c++项目之前,我想建立一个良好的多平台环境,并使用一些基本的修订形式(rsync)。为了做到这一点,我学会了如何构造makefile(使用未命名的变量),并开始在windows上的cygwin环境中使用mingw。这样我就有希望在所有平台上以一种类似unix的方式进行开发。
我不明白的是分发依赖于动态库的编译程序的标准工作实践。例如,当我在windows上使用mingw进行编译时,我需要将最基本的库(libstdc++-6.dll)添加到可执行目录中以使其运行。只是对于标准库,我需要添加三个。dll,即使是这样,依赖步行者显示了无数的,虽然它似乎运行。
当然每个库都需要包含在内,因为不可能保证最终用户在本地拥有它?
如果是这种情况,通常只是将动态库包含在与可执行文件相同的目录中吗?
我还读到。so文件作为一个导入库和一个动态库。那么这些也需要包含在可执行目录中吗?
Cmake对于这些事情很有用,我想我最终会使用它。也就是说,我认为学习如何在没有它的情况下完成跨平台开发对我很有帮助。
不,您不需要包含依赖项漫游器中提到的每个.dll
。它们中的大多数,包括标准库,都是由Microsoft/Posix等保证的。
一个好的经验法则是,如果你必须在你的计算机上安装它,你可能必须在用户的计算机上安装它。
两件事:
-
如果你的依赖关系不是很大,你可以在lib子目录中包含部分库,并在那里编译它们以编译你的应用程序。在c++中,如果您依赖于Boost文件系统或Boost线程,那么在lib文件夹中包含Boost的部分分布是相当常见的。
-
像CMake这样的工具可以很容易地构建跨平台的makefile。如果安装了库,它们会负责查找库的所有工作,甚至可以编写来下载丢失的库。这样的解决方案可以使您的发行版代码保持较小,并且仍然可以获得所需的一切。就我个人而言,我使用CMake为我所有的应用程序,因为我讨厌写makefile和glob_recurse是如此有用。
- C++GTKMM gui循环依赖关系
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- Doxygen - 如何在不生成图形的情况下生成文本调用关系结果
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 在 c++ 中对字符串进行操作的关系运算符无法按预期工作
- 改变或缩放两个正态分布以具有特定的相关系数
- 如何记住这种递归关系?
- 如何创建没有特定定义的随机分布?uniform_int_distribution是从其他类继承的吗?
- 如何在头文件中声明类模板(由于循环依赖关系)
- 移动语义和深层/浅层复制之间有什么关系?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 对在不同二进制文件中创建的对象文件的依赖关系
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 模拟测试中类的依赖关系
- 关于记忆后这种递归关系的时间复杂度
- C++模板方法中的循环依赖关系
- 解析正交模块的依赖关系
- 动态库、依赖关系和分布