一些开源项目明确指出,为了在 Windows 上进行编译,它们需要一个微软编译器(通常也是一个特定版本,因为后面的版本不兼容或将拒绝编译旧代码)。
因为这对我来说似乎很荒谬,因为有有foss编译器可以为Windows进行编译,所以微软编译器对于任何基本任务都是必需的,我假设这是因为这些项目使用对库的api调用(例如 msvcrt*.dll),由于某种原因,mingw-gcc、clang 和 Windows 编译器的其他端口无法进行编译。
我对这些要求的理解很肤浅,因为我对编译代码的经验主要来自Linux,这让我很担心,因为获得一个微软编译器并不简单。获得它们的唯一方法是通过 Microsoft Visual C++ 的 Express 版本,即使如此,最新版本也将完全拒绝安装在像我这样的旧 winxp 机器上,目前唯一可用的版本是 vc++express2010,这需要注册才能从试用软件变成免费软件(即使如此,我也不清楚这是否有效或它需要什么 - 也许操作系统挂钩“调试”和其他相互引用?)。1)我的问题是,这些项目是否依赖于微软编译器,因为它们是针对这些仅限微软的库进行构建的(这显然是 foss 编译器无法做到的)?
如果原因是构建脚本或预处理器指令,那似乎很荒谬,因为这些可以相对容易地移植。
2)另外,即使我避免任何 msvcrt/.net/etc,是否有可能?调用,我仍然发现自己需要一个微软编译器来编译本机 Windows 软件(假设没有使用执行这些调用的库)?
3)我可以简单地使用 clang 和一些小部件库来制作原生 Windows 软件吗?
4) 我可以修改项目的源代码,使其不依赖于微软编译器吗?
(好吧,这是 4 个问题,抱歉,这对我来说很难表达清楚)。
1)我的问题是,这些项目是否依赖于微软编译器 针对这些仅限微软的库进行构建(显然 foss编译器做不到)?编译器供应商和 GUI 框架供应商可以提供与 MS DLL 类似的 DLL。一些 MS DLL 是
系统 DLL,由其他编译器和框架供应商使用。
如果您使用编译器或框架特定的 DLL,它们需要伴随您的程序(项目)的安装。
2)另外,即使我避免任何 msvcrt/.net/etc,是否有可能? 调用,我仍然发现自己需要微软编译器来编译 本机 Windows 软件(假设没有使用执行以下操作的库) 执行这些调用)?不。 如果你浏览 StackOverflow 上的帖子,有很多人直接使用 Windows API,我猜你所说的
native windows 软件。 通常,这些 API 的代码位于系统 API 中。 编译器将函数调用转换为对这些 DLL 的调用,并根据需要加载它们。
3)我可以简单地使用 clang 和一些小部件库来制作原生吗 Windows 软件也一样吗?不,你不能。 这就是它们存在的原因。 同样,许多人在使用 Qt 和 xWidgets 等框架时没有使用 MS 编译器。 我这样做了一段时间。 我切换到 Visual Studio,主要是为了调试器。 我不喜欢其他 IDE 尝试使用 GDB 的方式。 否则,我不会使用 MS,因为它们倾向于使用 Microsoft 标准语言而不是 ISO。
4)我可以修改项目的源代码,使其不依赖于 微软编译器?不,这就是为什么有免费软件和其他编译器的原因。
嗯,可以使用 Java 创建不使用 MS 编译器的 GUI,但它们使用 Windows API。
看起来您需要在网上搜索“GNU GUI 教程 C++”并查看弹出的内容。 另外,搜索“wxWidgets”和“Qt”以获取其他框架。