【发布时间】:2016-11-11 12:43:13
【问题描述】:
在链接或运行用 C 或 C++ 编写的应用程序时,我偶然发现了错误的 MSVC 运行时问题。因此,我尽量准确地使用正确的版本。
我看到 SDL(简单 DirectMedia 层)库是用 MSVCRT 预编译的,AFAIK 是用 MSVC 4.2 到 6.0 编译的。尽管如此,该预编译库仍适用于我使用后来的 Visual Studio 2015 v14 编译的应用程序。
- 为什么将旧 MSVCRT 与 MSVCR140 链接没有问题,例如SDL?
- 有没有办法让库与任何更强大的 Visual Studio 编译器兼容?
- 如何使用其他编译器解决这个问题,例如GCC 甚至在 Linux 或 Mac 上?
【问题讨论】:
-
让它成为一个静态库 - 这样你就不会遇到任何包的问题
-
不过,预编译的 SDL 库怎么没有问题呢?
-
跨平台库通常从 Unix 开始,使其与许多 Unix 风格兼容是首要问题。并且会支持像 GCC 这样的开源编译器。将其移植到 Windows 通常涉及 MinGW。其中没有编写自己的运行时库,它使用 msvcrt.dll。在程序中加载多个 CRT 副本是非常危险的,必须仔细设计库接口。但 SDL 肯定做对了。与使用 winapi 没有其他区别,它也使用 msvcrt.dll。并且经过精心设计。