不同版本编译器编出来的library可以混用吗?
可能能够链接但是或许运行时出错,或者直接不能链接。
不同编译器编译出来的静态库,甚至于相同编译器用不同编译选项编译出来的静态库很可能都是没有办法静态链接的。如果你只是应用了系统调用或者C Runtime Library 那还好说,如果用到了C++ 标准库函数、类或者模版,那么很大可能都是没法链接的。通常用MSVC编译的静态链接库都会链接Microsoft C Runtime Library(MSCRL),后面有一串版本号,如果你运行程序时,调用了两个不同版本的C Library很有可能就会出现错误。
动态链接库有些许区别,许多时候都能用编译器链接另一个编译器产生的动态链接库。当动态链接库是由C语言写成的,即便需要链接的程序是用C++写的也没有关系,很多时候都能成功链接。如果是用C++编译产生的动态链接库,那么如果你只跟其中用extern "C"定义的部分通信那么也没问题,否则的话可能就会有链接错误。因为编译器处理C++函数的时候采用了一些不同的策略(like name-mangling scheme)。
这里有一篇文章讲如何编写跨编译器的library,同样适用于不同版本的MSVC,希望有帮助。