一次lib的项目配置
前提:
有两个解决方案A和B,其中A下面的项目为A1,A2,A3等等,B下面的项目为B1,B2,B3等等
我先用A的releaseinfo版本编译,拿到A1,A2,A3的rd lib(形如A1rd.lib),加入到B的releaseinfo版本几个项目中的依赖库
后面我需要编译B的release,由于我没有B的release版本,所以我把releaseinfo的版本复制了一份,把debug相关优化都给关了后,我此时用A的release编译,拿到A1,A2,A3的lib(形如A1.lib),此时直接放到B中原来放Ard的lib同目录下,问题就出现了
A的几个dll都加载不上,并且我查看B的release生成的dll,用dependencies查看,发现还是链接的A1rd.dll,这肯定不对呀,我的B release编译出来的dll,应该是去调用A1.dll
这说明了我的B1.dll还是拿到了A1rd.dll的名字,而不是A1.dll的名字,而B1得到A1的名字是从A1.lib中拿到的,简单理解A1.lib是告诉其他dll它的dll名字叫A1.dll
当然他们名字也可以不相同,比如我在A1项目中生成dll的名字是叫A1test.dll,而A1项目中链接器高级中导出lib名字是vs22-A1.lib,那其他人拿到vs22-A1.lib,也就知道了这个lib对应的dll名字是A1test.dll
但是我的A1.lib也没问题呀,我去检查了A1项目的导出lib也叫做A1.lib,导出dll也是A1.dll
于是我去看B1的依赖项,发现B1的release因为是直接从releaseinfo复制的,所以依赖项还是A1rd.lib,怪不得会一直找A1rd.dll
以后写C++编译的dll和lib,以及引入时,一定要先匹配