前言
很多时候因为我们不想在原有的重要代码上作修改,常常将代码复制一份。今天讨论的就是代码复制后,复制的代码运行不正常或出错的问题。
第一个问题:图片等资源文件运行时加载失败
当我将程序运行起来后,我发现有些图片没有显示出来,判断是资源文件的问题,虽然我是将整个项目都复制了一份,资源文件肯定也是一起复制过来的,但我发现visual studio里没有加载资源文件,所以我把资源文件重新在visual studio里添加了一遍,然后重新cmake就解决了。
第二个问题:使用LoadLibrary()方法加载动态库时失败
因为我想使项目更纯洁,便手动将原来复制过来的visual studio生成的debug目录,也就是原来visual studio生成好的各种动态库、静态库和执行程序全部删除了,然后用visual studio自己重新生成,再用windeployqt.exe工具生成缺少的动态库。看似程序运行没有问题,但是在用LoadLibrary()方法加载某个动态库时,加载失败了。通过仔细观察,我发现我自己生成的动态库比原来复制的动态库少,导致动态库加载失败的原因就是缺少动态库的依赖项,后面将没有复制的动态库复制过来就好了。
通过实验可以知道,我们复制项目后没有必要去手动删除debug目录下的各种动态库、静态库和执行程序,因为这样会删除很多必需的动态库依赖项(这些依赖项即使使用windeployqt.exe工具也不能保证全部生成好),我们可以使用visual studio执行清理操作,这样只会删除自己编写的代码生成的库文件,然后执行生成操作,这些库文件又重新回来了,其他不是项目生成的库文件等依赖项不要再手动删除了。