运行 C 在另一台 PC 上构建 .exe
Running C Built .exe On Another PC
我用 Visual Studio 使用标准 C 库 + 几个 windows 库用 C 语言构建了一个程序。
该代码仅获取用户输入(使用 scanf,因此通过 cmd window)根据输入进行一些计算并输出一些文本文件,仅此而已。
我想知道我需要在另一台标准 Windows 计算机上对 运行 我的 exe 执行什么操作,而不需要安装任何其他文件,例如整个 Windows SDK。?
是否只是能够构建发布版本(而不是调试)的情况?
非常感谢
一般来说,C 程序不是 "portable",这意味着它们不能被复制到其他机器并期望 运行。
在一些例外情况下,C 可执行文件可以安全地 运行 在其他机器上:
- CPU 支持相同的指令集,具有相同的兼容副作用集和可能相同的错误。
- 操作系统支持相同的系统 api 点,具有相同的兼容副作用集和可能相同的错误。
- 已安装的非操作系统库支持相同的 api 点,具有相同的兼容副作用集和可能相同的错误。
- 源(您构建代码的平台)和目标(您将 运行 可执行文件所在的平台)之间的 API 调用约定相同。
当然,并非所有 CPU 和 OS 都需要 100% 兼容,只需要编译程序使用的部分(在编译时并不总是很容易看到,而不是 100% 相同的源代码表示)
要满足这些条件,通常您使用的是相同版本的操作系统,或者由支持当前版本和旧版本操作系统的操作系统包装商设计的兼容接口。
有关如何最轻松地完成此操作的详细信息因操作系统而异,一般来说,即使存在兼容层,您也需要进行充分的测试,因为尽管有承诺,但副作用和错误往往会有所不同多操作系统兼容性。
最后,有些环境可以在操作系统(如 QEmu)上通过模拟外部 CPU 指令集在 运行时间,将这些指令转换为与当前兼容的指令CPU。此类系统在非 Linux 操作系统中并不常见;而且,如果动态库的加载无法定位和加载外来的指令集库,他们可能会绊倒。
有了所有这些注意事项,您就会明白为什么大多数人决定编写可移植源代码并在每个目标平台上重新编译它;或者,为已经存在于多个平台上的解释器编写代码。使用解释器方法,CPU 在概念上是一个虚拟的,它在硬件上实现相同,让您编写一组源代码以在所有硬件平台上进行解释。
I've built a programme in C with Visual Studio using standard C libraries + a couple of windows libraries.
I'm wondering what would I then need to do to run my exe on another standard Windows computer without it needing to install any additional files e.g. the whole Windows SDK.?
您没有解释您的程序真正在做什么。它有图形用户界面吗?它是网络服务器吗?您有时间改进或增强它吗?可以在命令行上运行吗?
为什么不能共享 C 源代码(例如使用 github)?
如果你想要一些图形界面,可以考虑使用GTK. It has been ported到Windows。
如果 Web 界面就足够了,请考虑在您的程序中使用 libonion,或者为您的特定平台寻找一些 C 语言的 HTTP 服务器库。
但你需要了解的主要是linking, not only to the C programming language (read the n1570 specification). Hence read about Linkers and loaders。
你应该更喜欢static libraries. Their availability is platform specific. Read more about Operating Systems. Also, sharing some Microsoft Windows system WinAPI libraries could be illegal (even when technically possible), so consult your lawyer after showing him the EULA你必须的。
我的意见是 Linux distributions are very friendly when learning to program in C (e.g. using GCC or Clang as your C compiler). Both Ubuntu and Debian 可以免费下载,但实际上需要大约一百 GB 的连续可用磁盘 space。安装其中之一之前,请务必备份您的重要数据。
你有没有考虑过porting, adapting and compiling your C code to WebAssembly? If you did that, your code would run inside most recent Web browsers. Look also into Bellard's JSLinux.
相关答案 . Notice that C can be transpiled to JavaScript,然后 运行 在最近的网络浏览器中本地。
如果您选择了正确的 CPU 目标(项目配置属性 -> C/C++: 启用增强型指令集) 这样二进制代码就不会包含只有极少数 CPU 可以理解的指令,Visual Studio 的默认设置是要使用最广泛的 x86 或 x64 CPU 集支持的指令,那么您的程序将 运行 几乎可以在任何 Windows 计算机上运行。不过,您需要分发不属于基础 Windows 安装的任何 DLL,其中包括任何其他动态链接语言 运行 次,例如 Visual C++ 运行 次。
导出必须与可执行文件一起打包的 DLL 列表的一个好方法是创建一个新安装的 Windows 虚拟机,其中没有任何开发工具,然后尝试 运行 你的代码在那里。如果您收到缺少 DLL 的错误,请添加它并重复。当谈到 Visual C++ 运行 时,Microsoft 为不同版本提供了可安装包,您可以将这些包作为安装的一部分进行分发(Visual C++ Whatever Redistributable Package)。
此外,请注意,为 32 位 Windows 编译的程序将主要 运行 在 64 位版本上,但反之则不然。
我用 Visual Studio 使用标准 C 库 + 几个 windows 库用 C 语言构建了一个程序。
该代码仅获取用户输入(使用 scanf,因此通过 cmd window)根据输入进行一些计算并输出一些文本文件,仅此而已。
我想知道我需要在另一台标准 Windows 计算机上对 运行 我的 exe 执行什么操作,而不需要安装任何其他文件,例如整个 Windows SDK。?
是否只是能够构建发布版本(而不是调试)的情况?
非常感谢
一般来说,C 程序不是 "portable",这意味着它们不能被复制到其他机器并期望 运行。
在一些例外情况下,C 可执行文件可以安全地 运行 在其他机器上:
- CPU 支持相同的指令集,具有相同的兼容副作用集和可能相同的错误。
- 操作系统支持相同的系统 api 点,具有相同的兼容副作用集和可能相同的错误。
- 已安装的非操作系统库支持相同的 api 点,具有相同的兼容副作用集和可能相同的错误。
- 源(您构建代码的平台)和目标(您将 运行 可执行文件所在的平台)之间的 API 调用约定相同。
当然,并非所有 CPU 和 OS 都需要 100% 兼容,只需要编译程序使用的部分(在编译时并不总是很容易看到,而不是 100% 相同的源代码表示)
要满足这些条件,通常您使用的是相同版本的操作系统,或者由支持当前版本和旧版本操作系统的操作系统包装商设计的兼容接口。
有关如何最轻松地完成此操作的详细信息因操作系统而异,一般来说,即使存在兼容层,您也需要进行充分的测试,因为尽管有承诺,但副作用和错误往往会有所不同多操作系统兼容性。
最后,有些环境可以在操作系统(如 QEmu)上通过模拟外部 CPU 指令集在 运行时间,将这些指令转换为与当前兼容的指令CPU。此类系统在非 Linux 操作系统中并不常见;而且,如果动态库的加载无法定位和加载外来的指令集库,他们可能会绊倒。
有了所有这些注意事项,您就会明白为什么大多数人决定编写可移植源代码并在每个目标平台上重新编译它;或者,为已经存在于多个平台上的解释器编写代码。使用解释器方法,CPU 在概念上是一个虚拟的,它在硬件上实现相同,让您编写一组源代码以在所有硬件平台上进行解释。
I've built a programme in C with Visual Studio using standard C libraries + a couple of windows libraries.
I'm wondering what would I then need to do to run my exe on another standard Windows computer without it needing to install any additional files e.g. the whole Windows SDK.?
您没有解释您的程序真正在做什么。它有图形用户界面吗?它是网络服务器吗?您有时间改进或增强它吗?可以在命令行上运行吗?
为什么不能共享 C 源代码(例如使用 github)?
如果你想要一些图形界面,可以考虑使用GTK. It has been ported到Windows。
如果 Web 界面就足够了,请考虑在您的程序中使用 libonion,或者为您的特定平台寻找一些 C 语言的 HTTP 服务器库。
但你需要了解的主要是linking, not only to the C programming language (read the n1570 specification). Hence read about Linkers and loaders。
你应该更喜欢static libraries. Their availability is platform specific. Read more about Operating Systems. Also, sharing some Microsoft Windows system WinAPI libraries could be illegal (even when technically possible), so consult your lawyer after showing him the EULA你必须的。
我的意见是 Linux distributions are very friendly when learning to program in C (e.g. using GCC or Clang as your C compiler). Both Ubuntu and Debian 可以免费下载,但实际上需要大约一百 GB 的连续可用磁盘 space。安装其中之一之前,请务必备份您的重要数据。
你有没有考虑过porting, adapting and compiling your C code to WebAssembly? If you did that, your code would run inside most recent Web browsers. Look also into Bellard's JSLinux.
相关答案
如果您选择了正确的 CPU 目标(项目配置属性 -> C/C++: 启用增强型指令集) 这样二进制代码就不会包含只有极少数 CPU 可以理解的指令,Visual Studio 的默认设置是要使用最广泛的 x86 或 x64 CPU 集支持的指令,那么您的程序将 运行 几乎可以在任何 Windows 计算机上运行。不过,您需要分发不属于基础 Windows 安装的任何 DLL,其中包括任何其他动态链接语言 运行 次,例如 Visual C++ 运行 次。
导出必须与可执行文件一起打包的 DLL 列表的一个好方法是创建一个新安装的 Windows 虚拟机,其中没有任何开发工具,然后尝试 运行 你的代码在那里。如果您收到缺少 DLL 的错误,请添加它并重复。当谈到 Visual C++ 运行 时,Microsoft 为不同版本提供了可安装包,您可以将这些包作为安装的一部分进行分发(Visual C++ Whatever Redistributable Package)。
此外,请注意,为 32 位 Windows 编译的程序将主要 运行 在 64 位版本上,但反之则不然。