cppunit1.12.1 vs2008 vc6 共存

来源:互联网 发布:time machine网络备份 编辑:程序博客网 时间:2024/05/22 11:44

cppUnit中的框架lib文件,在install-win32.txt有说明:

* cppunit (cppunit.lib) : unit testing framework library, the one you use
to write unit tests.

* cppunit_dll(cppunit_dll.dll/lib) : same as above, but build as a DLL.

cppunit.lib  是测试框架的静态链接库版本 (cppunit.lib是release版,cppunitd.lib是debug版)

cppunit_dll.lib和cppunit_dll.dll是测试框架库的动态链接版(同样cppunitd_dll.lib和cppunitd_dll.dll是debug版,不带d的是release版)

 

如果在vs6和vc9中都用静态链接,对于框架库不存在共存的问题, 只要两个编译器分别将lib目录设置正确即可.

如果都用动态链接,可能会有问题,没有尝试,估计也是向testrunner.dll一样没办法解决.

 

所以说如果不需要cppunit的mfc的对话框ui界面,并且用静态库,两个编译器分别用一份cppunit的实例没问题.

 

关键是testrunner, testrunner下的MsDevCallerListCtrl.cpp 第67行 version("7.0") 对于vs2008需要改成version("9.0") 估计vs2005是要改成8.0

所以说对于vc6和vc9, testrunner产生的那四个dll不一样了

cppunit+vc6 用vc9编译出的testrunner 的dll系列会崩溃, 同样

cppunit+vc9 用vc6编译出的testrunner的dll系列会崩溃.

所以需要两个testrunner的dll系列.

 

我的做法是复制一份cppunit1.12.1, 与之在一个目录层次命名为cppunit1.12.1-vs08,这样就有两个cppunit/lib目录.

而这就注定了,如果想要两个编译器都用cppunit的话,共存不会很完美.

如果将cppunit/lib 添加到环境变量path, 那么只能添加一个路径到环境变量,即使添加两个也只会第一个被优先选择.

假如我添加到path中 $somedirectory/cppunit1.12.1/lib;$somedirectory/cppunit.1.12.1-vs08/lib;

我有两个工程用到了cppunit并且用了mfc的ui,分别用vc6和vc9写的.

现在运行vc6的程序,没问题,一切正常.

运行vc9的程序,必然崩溃.

即使去掉环境变量path中的$somedirectory/cppunit.1.12.1-vs08/lib;也是一样. 因为vc9去找testrunnerud.dll在$somedirectory/cppunit1.12.1/lib找到了,那就直接用了

结果就是崩溃.

解决办法就是对于每个vc9的用到cppunit及mfcUI的项目,都把testrunner的四个dll拷到exe所在的debug目录下,寻找dll会优先从本目录开始,这样就不会有问题

但是每个工程都要拷贝一个dll,还是挺烦人得.

添加到公共目录应该是不行的,因为这和环境变量方法一样了,行不通.

 

总之,使用cppunit, 使vc6,vc9都能用, 是可以做到的,只是不完美.

哪位高人有更好的方法,望告知.

 

原创粉丝点击