我迷失在这里,我不知道如何继续。这不是关于如何使我的程序工作的问题,这是一个关于如何停止浪费时间的问题。
我的编程环境是Windows上的Visual Studio 2013,用C ++编写。
我广泛使用3个库,即:boost(使用动态链接),OpenCV和Qt。
在开发过程中,我已将VS配置为默认查看包含和.lib的3个库。我还在我的PATH环境变量中添加了包含所有dll的3个文件夹。
它有效,但有时很痛苦,让我在什么时候解释你。
第一个麻烦:任何时候我有一个LNK错误告诉我我错过了一个函数,它通常在OpenCV上,因为它只有一个引用所有函数的包含文件。我必须查看OpenCV的源代码,看看这个函数属于哪个模块,并知道我必须将我的程序链接到哪个。
第二个麻烦:什么时候部署我的应用程序,我必须运送所有相关的dll。要知道我需要哪一个,我打开依赖walker并尝试忘记什么,然后我在另一台计算机上测试它,因为102%的时间我错过了一对,然后我必须配置我的Installer生成器包括所有这些一个接一个。
第三个麻烦:为了简化配置新开发机器的过程,我最近切换到了NuGet。这很棒,只需点击几下即可为任何项目添加提升功能。但是现在我的增强DLL是无处不在,每个boost库有一个文件夹,而且因为有几十个我甚至不能立即将它们全部添加到我的PATH中,所以我必须移动他们手动到相应的文件夹,这真的不是我想要做的不那么珍贵 - 但是你是谁来判断时间
我环顾四周,找不到任何有关此问题的良好做法,可能是因为它们太明显,或者对特定设置过于具体。
你怎么办?如果你是我,你会怎么做?
答案 0 :(得分:2)
我们将所有外部依赖项与代码一起放在版本控制中。这确保了所有代码都可以在我们的任何开发机器上“开箱即用”构建,并确保对于任何给定版本的代码,我们确切地知道哪些依赖项具有。
检查缺少依赖关系的最佳方法是如何拥有一个好的自动化测试套件,如果你有全面的融合,那么如果你的测试通过,你必须部署所需的库。
在链接到适当的库方面,遗憾的是,这听起来像OpenCV的结构问题(我不熟悉OpenCV)。当我在一个不熟悉的库中出现链接错误时,我倾向于在Windows下使用dumpbin并在Linux下使用db来轻松地使用符号。