[Python-Dev] distutils.cygwinccompiler: invalid executable for interpreters (original) (raw)

Alexey Borzenkov snaury at gmail.com
Thu Jan 10 23:33:51 CET 2008


Hi everyone,

Some time ago I've stumbled upon a problem with compiling py2exe with mingw: it resulted in invalid executable run.exe. At first I dismissed it as some very strange problem, but recently I decided to look into it again and found that the reason for this is a .def file, supplied during compilation, that causes linker to produce executable with IMAGE_FILE_DLL in its PE Header Characteristics field, and operating system refuses to execute it.

I traced this problem to the following block in distutils/cygwinccompiler.py:

    # handle export symbols by creating a def-file
    # with executables this only works with gcc/ld as linker
    if ((export_symbols is not None) and
        (target_desc != self.EXECUTABLE or self.linker_dll == "gcc")):

Removing 'or self.linker_dll == "gcc"' obviously helps. To me this sounds like a bug (introduced in revision 17747 on trunk, more that 7 years old!), but I was wondering if there's any logic behind generating a .def file for the executable (sidenote: look at distutils/emxccompiler.py where .def file is generated for executables only). To me it's very unlikely that anyone ever needs to export symbols from an executable (I'm not even sure if it can work as intended on Windows). Even then, if there's anyone at all who needs such a machinery (again, what for?), at the very least it shouldn't produce "LIBRARY" line. As minimal change as this:

        # Generate .def file
        contents = [
            "LIBRARY %s" % os.path.basename(output_filename),
            "EXPORTS"]
        if target_desc == self.EXECUTABLE:
            contents.pop(0)

Did the trick (generated executable runs fine).

Is anyone interested in a bug report for this? Also, is there any chance that if there is interest it could end up in release25-maint?

Best regards, Alexey.



More information about the Python-Dev mailing list