Binary-compatible C++ Interfaces



不同版本编译器编出来的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,希望有帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值