供应商提供的C++库如何支持多个编译器?

5
我在一个C++程序中使用供应商提供的库。供应商只提供了.lib、.dll和头文件。
这个库最初在MSVC++ 6中使用,现在在MSVC 2010中使用。
他们似乎支持mingw、qt等。我在使用它时,无论是调试模式还是发布模式都没有问题。
我最近向项目添加了另一个依赖项yaml-cpp,它是一个开源项目,没有提供二进制文件。我能够使用cmake和MSVC 2010构建yaml-cpp作为静态库,并成功地将其链接到我的项目中。
为了做到这一点,我必须分别链接到.lib的调试和发布版本,因为我遇到了奇怪的Microsoft CRT/linker问题,我刚刚开始学习。
我很好奇,我的第一个库(如果你感兴趣的话是libXl)的供应商如何提供可以在多种编译器上工作的.lib和.dll而不用担心CRT版本?
你如何编写代码才能实现这一点,或者是链接过程?yaml-cpp是一个跨平台库,是否可能以类似的方式编译它,从而允许我在我的项目中使用单个.lib?
我不确定要查找什么资源来了解更多信息。人们如何学习这种东西?谢谢!

据我所知,创建一个新的lib工程并进行所有设置应该是可以的。除了像/MT这样的一些开关可以更改外,其他都是标准的。如果您使用yaml及其提供的项目,则可能会有一些旧的编译器开关,您应该尝试为该库创建一个新项目。 - Raxvan
1
如果该库适用于MSVC++ 6和MSVC 2010,则很可能不是C++库,而是C库。据我所知,C++运行时库非常特定于每个MS版本,不能混合使用。 - Anon Mail
1个回答

1
一种 .lib 和 .dll 可以适用于多种编译器的原因在于确保代码中没有编译器特定的依赖项。一旦制作完成,.lib 和 .dll 不会重新编译,因此如果编码正确,则它们应该是独立的,并且可以从任何能够使用 .dll 或 .lib 的地方访问其功能。
关于 dll 和 lib 的利弊有一些讨论here,您可能会发现它很有趣。
如果您需要更多信息,请告诉我,我会尽力提供。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接