【问题标题】:Running C Program on Windows 8.1 using Python (or not Python)使用 Python(或不使用 Python)在 Windows 8.1 上运行 C 程序
【发布时间】:2014-10-10 02:37:29
【问题描述】:

最初的目标是在 Windows 平台上编写一个可执行的软件,它可以从 7 段显示器中读取数字并以恒定的时间间隔记录下来。我在 Python 中尝试了几个 OCR 库(因为我打算用 Python 编写程序),但了解到它们更适合手写字母,并很快将我的注意力转移到另一个用 C 编写的开源程序,专为阅读而设计来自 7 段显示器的数字:http://www.unix-ag.uni-kl.de/~auerswal/ssocr/

所以我在 Linux 中编译了源代码,并计划将编译后的文件连同其链接的库文件一起移动到 Windows 机器上,天真地认为我可以简单地从 Python 脚本“执行”来执行程序。事实证明它不能 - 只是尝试运行程序(在最后手动添加 .exe 扩展名并双击之后)会生成响应“应用程序无法在这台电脑上运行。要找到这台电脑的版本,检查与软件发行商”。

所以我的问题是,是否有一种方法可以在 Windows 平台上简单地从脚本执行 C 程序,如果没有,您可能会建议我做什么来完成上述任务?

【问题讨论】:

  • 在你的问题中的链接中有一个在 windows 上使用应用程序的链接,你知道吗?
  • 是的,使用 Cygwin。但我很好奇是否有更直接的方法。
  • 直截了当?怎么样?
  • 就像我提到的,有没有办法通过从脚本等调用文件来完成这个?
  • 使用cygwin编译代码,根据需要用subprocess调用?

标签: python c windows


【解决方案1】:

您可以使用 Python 执行任何程序(与其他编程语言一样)。但是(对于所有语言)发生的情况是它们进行系统调用并要求底层操作系统执行程序,因为这是操作系统的职责之一。

打开一个 Python REPL(或编写一个 Python 脚本)并尝试一下(这只是从 python 执行程序的方法之一)

import subprocess
# if you're on windows call this
subprocess.call("notepad", shell=True)
# If on Linux call this
subprocess.call("ls", shell=True)

发生的情况是 Python 要求 OS 执行指定的程序(记事本或 ls),天气 OS 可以运行请求的应用程序是另一回事。

您的 C 程序是在 Linux 上编译的,因此它是 Linux 可以运行的格式(可能是 ELF 格式)的可执行文件。 Windows 要求可执行文件采用不同的文件格式。文件扩展名只是帮助环境适当地处理文件。如果您将 Linux 可执行文件的扩展名更改为“.exe”,它不会更改其内容,因此 Windows 仍然无法运行它。

您需要在 Windows 上重新编译您的 C 程序,以便编译后的程序可以在 Windows 上执行。如果程序需要 POSIX 环境(例如,如果它使用 fork() 系统调用等),那么您可以使用 Windows 上的 Cygwin(它提供 Linux for Windows 中可用的系统调用和库)来编译它。

【讨论】:

  • 那么在 Cygwin 上编译的输出与在 Linux 上的输出不一样?
  • 是的,它将是一个不同的文件,采用 Windows 可执行格式。请注意,您可能不需要 Cygwin,也许您可​​以使用 Windows 上的任何其他 C 编译器编译它。但是,如果 Cygwin 使用的是 Windows 中不可用的库,则您将需要 Cygwin。您需要参考 C 程序的文档,或者尝试在没有 Cygwin 的情况下编译它,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2011-07-23
  • 1970-01-01
  • 2020-04-02
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多