Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在cygwin上编译PyPy_Python_Gcc_Cygwin_Pypy - Fatal编程技术网

Python 在cygwin上编译PyPy

Python 在cygwin上编译PyPy,python,gcc,cygwin,pypy,Python,Gcc,Cygwin,Pypy,我试图在cygwin上编译PyPy,当python试图打开文件“externmod”时,编译就会停止,该文件刚刚用gcc编译。cygwin上的gcc的问题是,它会自动将一个“.exe”附加到您正在编译的任何东西上,因此,即使gcc被称为gcc-shared-Wl,--enable auto image base-pthread-o/tmp/usession-release-1.8/shared\u cache/externmod,输出文件最终还是externmod.exe。因此python试图打

我试图在cygwin上编译PyPy,当python试图打开文件“externmod”时,编译就会停止,该文件刚刚用gcc编译。cygwin上的gcc的问题是,它会自动将一个“.exe”附加到您正在编译的任何东西上,因此,即使gcc被称为
gcc-shared-Wl,--enable auto image base-pthread-o/tmp/usession-release-1.8/shared\u cache/externmod
,输出文件最终还是
externmod.exe
。因此python试图打开
/tmp/usession-release-1.8/shared_cache/externmod
,但找不到它——因此编译停止。除了重新编译gcc,有人知道如何解决这个问题吗?我不想这样做。

Windows需要“.exe”扩展名才能知道它是可执行的。您需要修改构建以查找Windows并使用.exe扩展名。

要回答您的问题,解决问题的最简单方法是在pypy/translator/platform中修改init.py,使其指向实际的平台,而不是现在得到的“无”。在linux.py中,您会注意到有一行'so_ext='so',这可能就是修复扩展问题的原因

请注意,尽管假装cygwin是linux的小技巧在这种情况下也会起作用,但稍后会有一些路障会让你感到困惑(不幸的是,我记得没有一个路障会有足够的细节来避免)

编辑:my init.py的相关部分当前如下所示

if sys.platform == 'cygwin':
    from pypy.translator.platform.linux import Linux, Linux64
    import platform
    if platform.architecture()[0] == '32bit':
        host_factory = Linux
    else:
        host_factory = Linux64
elif sys.platform.startswith('linux'):

在做了很多修改之后,我成功地编译了它

  • PyPy没有为Cygwin提供任何配置。如上所述,我复制了Linux 配置并根据需要对其进行修改。我特别删除了 -pthread标志和--export dynamic C linker标志应该是--export all symbol。这也是指定文件扩展名(.exe、.dll)的地方
  • Cygwin没有在tm结构中实现tm_gmtoff和tm_zone字段,这是POSIX标准的GNU扩展。PyPy使用这些字段来确定时区。我实施了变通办法。这些tm字段的使用将排列多个文件,这些文件都必须更改
  • 在Cygwin下,系统调用waitpid()期望插槽2的参数类型与PyPy使用的不同。我实现了一个重新映射参数的包装器
  • 在Cygwin下,curses C头文件在ncurses下

  • 您可以在

    上找到cygwin的补丁和说明。您是对的,还有其他路障。但是你之前已经经历了整个过程,并让它工作了吗?我大约在一年前编译了它,是的(你激励我再试一次:D)。如果使用上面提到的特定修复程序,您将遇到一个关于rctime模块不转换的问题。根据建议,我禁用了rctime和_多处理模块;不幸的是,这将破坏任何使用线程的代码。我正在考虑启用一些windows功能来弥补这一点,但我还没走多远。