gpt4 book ai didi

c++ - 我应该/可以/必须如何处理我的 C++ 项目所依赖的 dll?

转载 作者:行者123 更新时间:2023-11-30 03:54:43 25 4
gpt4 key购买 nike

我在这里迷路了,我不知道如何继续。这不是关于如何让我的程序工作的问题,这是关于如何停止浪费我的时间的问题。

我的编程环境是 Windows 上的 Visual Studio 2013,使用 C++。

我广泛使用 3 个库,即:boost(使用动态链接)、OpenCV 和 Qt。

在开发过程中,我已将 VS 配置为默认查看这 3 个库以查找 include 和 .lib。我还将包含所有 dll 的 3 个文件夹添加到我的 PATH 环境变量中。

它有效,但有时会很痛苦,让我来解释一下。

  • 第一个麻烦:任何时候我有一个 LNK 错误告诉我我错过了一个函数,它通常在 OpenCV 上,因为它只有一个引用所有函数的包含文件。我必须查看 OpenCV 的源代码才能了解此函数属于哪个模块,并了解我必须将我的程序链接到什么。

  • 第二个麻烦:当部署我的应用程序时,我必须将它与所有相关的 dll 一起发布。要知道我需要哪一个,我打开 dependency walker 并尽量不忘记任何事情,然后我必须在另一台计算机上测试它,因为 102% 的时间我错过了一对,然后我必须配置我的安装程序生成器以包括一个接一个。

  • 第三个麻烦:为了稍微简化配置新开发机器的过程,我最近切换到 NuGet。太好了,我只需单击几下即可为任何项目添加提升。但是现在我的 boost DLLs 无处不在,每个 boost 库我有一个文件夹,因为有几十个我现在甚至不能一次将它们全部添加到我的 PATH,所以我必须移动手动将它们放到适当的文件夹中,这真的不是我想要用我不那么宝贵但你是谁来判断的时间做的事情

我环顾四周,找不到关于这个问题的任何好的做法,可能是因为它们太明显了,或者对特定设置来说太具体了。

怎么样?如果你是,你会怎么做?

最佳答案

我们将所有外部依赖项与代码一起置于版本控制中。这确保所有代码都可以在我们的任何开发机器上“开箱即用”地构建,并且还确保对于代码的任何给定版本,我们确切地知道有哪些依赖项。

检查缺失依赖项的最佳方法是如何拥有一个好的自动化测试套件,如果您已经全面收敛,那么如果您的测试通过,那么您一定已经部署了所需的库。

不幸的是,就链接到适当的库而言,这听起来像是 OpenCV 结构的问题(我不熟悉 OpenCV)。当我遇到不熟悉的库的链接错误时,我倾向于在 Windows 下使用 dumpbin 并在 Linux 下使用 nm 来轻松地 grep 查找符号。

关于c++ - 我应该/可以/必须如何处理我的 C++ 项目所依赖的 dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com