Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6354627
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 24, 20262026-05-24T22:36:20+00:00 2026-05-24T22:36:20+00:00

Our C++ project uses mixed dynamic (Qt) and static (ffmpeg, portaudio) libraries. At the

  • 0

Our C++ project uses mixed dynamic (Qt) and static (ffmpeg, portaudio) libraries. At the moment I’m trying to port it to windows and the debug executable produced by mingw (via QtCreator) refuses to start (the error is such-and-such is not a valid executable). The release executable with the same linkage starts (but has some problems I would like to debug).

To narrow down the possible cause of the problem I made a dummy project that does nothing, just links to the same set of libraries and it has exactly the same problem. As long as I disable linking to both static libraries debug executable works, as soon as I enable any one of them the debug executable is broken.

I haven’t tried building dll versions of ffmpeg and portaudio yet, but I would like to understand what’s going wrong with the case as it is.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-24T22:36:22+00:00Added an answer on May 24, 2026 at 10:36 pm

    This is because of a nasty bug in the ld linker in the MinGW package that’s included in some Qt downloads.

    The ld linker that’s included with the MinGW 4.4.0 package has a bug in the default linker script for placement of the .debug_pubtypes section, which is where symbols or some debug information gets stored. The linker script causes that section to get placed at a virtual address that the loader doesn’t like (or something like that). Sometimes – if you don’t have symbols in the image, or if the symbols are small enough (or maybe there’s some other factor) the problem doesn’t show up.

    You have a couple of options:

    • use the -T <scriptfile> option to specify a correct linker script to ld
    • upgrade to a newer version of ld (version 2.21 that comes with MinGW 4.5.2 works fine).

    Here’s the default linker script from ld 2.21, which should work if you pass it in to the version you have (unfortunately my notes don’t say what the version number of the ld with the problem is – if you could drop a comment about that so I can update my notes, I’d appreciate it).

    /* Default linker script, for normal executables */
    OUTPUT_FORMAT(pei-i386)
    SEARCH_DIR("/c/temp/gcc/dest/i686-pc-mingw32/lib"); SEARCH_DIR("/c/temp/gcc/dest/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
    SECTIONS
    {
      /* Make the virtual address and file offset synced if the alignment is
         lower than the target page size. */
      . = SIZEOF_HEADERS;
      . = ALIGN(__section_alignment__);
      .text  __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :
      {
         *(.init)
        *(.text)
        *(SORT(.text$*))
         *(.text.*)
        *(.glue_7t)
        *(.glue_7)
         ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
                LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*));  LONG (0);
         ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
                LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*));  LONG (0);
         *(.fini)
        /* ??? Why is .gcc_exc here?  */
         *(.gcc_exc)
        PROVIDE (etext = .);
         *(.gcc_except_table)
      }
      /* The Cygwin32 library uses a section to avoid copying certain data
         on fork.  This used to be named ".data".  The linker used
         to include this between __data_start__ and __data_end__, but that
         breaks building the cygwin32 dll.  Instead, we name the section
         ".data_cygwin_nocopy" and explictly include it after __data_end__. */
      .data BLOCK(__section_alignment__) :
      {
        __data_start__ = . ;
        *(.data)
        *(.data2)
        *(SORT(.data$*))
        *(.jcr)
        __data_end__ = . ;
        *(.data_cygwin_nocopy)
      }
      .rdata BLOCK(__section_alignment__) :
      {
        *(.rdata)
                 *(SORT(.rdata$*))
        ___RUNTIME_PSEUDO_RELOC_LIST__ = .;
        __RUNTIME_PSEUDO_RELOC_LIST__ = .;
        *(.rdata_runtime_pseudo_reloc)
        ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
        __RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
      }
      .eh_frame BLOCK(__section_alignment__) :
      {
        *(.eh_frame)
      }
      .pdata BLOCK(__section_alignment__) :
      {
        *(.pdata)
      }
      .bss BLOCK(__section_alignment__) :
      {
        __bss_start__ = . ;
        *(.bss)
        *(COMMON)
        __bss_end__ = . ;
      }
      .edata BLOCK(__section_alignment__) :
      {
        *(.edata)
      }
      /DISCARD/ :
      {
        *(.debug$S)
        *(.debug$T)
        *(.debug$F)
        *(.drectve)
         *(.note.GNU-stack)
         *(.gnu.lto_*)
      }
      .idata BLOCK(__section_alignment__) :
      {
        /* This cannot currently be handled with grouped sections.
        See pe.em:sort_sections.  */
        SORT(*)(.idata$2)
        SORT(*)(.idata$3)
        /* These zeroes mark the end of the import list.  */
        LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
        SORT(*)(.idata$4)
        __IAT_start__ = .;
        SORT(*)(.idata$5)
        __IAT_end__ = .;
        SORT(*)(.idata$6)
        SORT(*)(.idata$7)
      }
      .CRT BLOCK(__section_alignment__) :
      {
        ___crt_xc_start__ = . ;
        *(SORT(.CRT$XC*))  /* C initialization */
        ___crt_xc_end__ = . ;
        ___crt_xi_start__ = . ;
        *(SORT(.CRT$XI*))  /* C++ initialization */
        ___crt_xi_end__ = . ;
        ___crt_xl_start__ = . ;
        *(SORT(.CRT$XL*))  /* TLS callbacks */
        /* ___crt_xl_end__ is defined in the TLS Directory support code */
        ___crt_xp_start__ = . ;
        *(SORT(.CRT$XP*))  /* Pre-termination */
        ___crt_xp_end__ = . ;
        ___crt_xt_start__ = . ;
        *(SORT(.CRT$XT*))  /* Termination */
        ___crt_xt_end__ = . ;
      }
      .tls BLOCK(__section_alignment__) :
      {
        ___tls_start__ = . ;
        *(.tls)
        *(.tls$)
        *(SORT(.tls$*))
        ___tls_end__ = . ;
      }
      .endjunk BLOCK(__section_alignment__) :
      {
        /* end is deprecated, don't use it */
        PROVIDE (end = .);
        PROVIDE ( _end = .);
         __end__ = .;
      }
      .rsrc BLOCK(__section_alignment__) :
      {
        *(.rsrc)
        *(SORT(.rsrc$*))
      }
      .reloc BLOCK(__section_alignment__) :
      {
        *(.reloc)
      }
      .stab BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.stab)
      }
      .stabstr BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.stabstr)
      }
      /* DWARF debug sections.
         Symbols in the DWARF debugging sections are relative to the beginning
         of the section.  Unlike other targets that fake this by putting the
         section VMA at 0, the PE format will not allow it.  */
      /* DWARF 1.1 and DWARF 2.  */
      .debug_aranges BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_aranges)
      }
      .debug_pubnames BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_pubnames)
      }
      .debug_pubtypes BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_pubtypes)
      }
      /* DWARF 2.  */
      .debug_info BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_info) *(.gnu.linkonce.wi.*)
      }
      .debug_abbrev BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_abbrev)
      }
      .debug_line BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_line)
      }
      .debug_frame BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_frame)
      }
      .debug_str BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_str)
      }
      .debug_loc BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_loc)
      }
      .debug_macinfo BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_macinfo)
      }
      /* SGI/MIPS DWARF 2 extensions.  */
      .debug_weaknames BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_weaknames)
      }
      .debug_funcnames BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_funcnames)
      }
      .debug_typenames BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_typenames)
      }
      .debug_varnames BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_varnames)
      }
      /* DWARF 3.  */
      .debug_ranges BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_ranges)
      }
      /* DWARF 4.  */
      .debug_types BLOCK(__section_alignment__) (NOLOAD) :
      {
        *(.debug_types) *(.gnu.linkonce.wt.*)
      }
    }
    

    I don’t mind telling you that I had to go through about a week of pain to figure this out. Windows doesn’t give any real help at all about the reason it thinks the executable is invalid, and debugging – even with cdb or WinDBG from the “Debugging Tools for Windows” – is little help. Windows seems to make the determination that the PE is invalid from deep within the bowels of the loader in the NT kernel, and doesn’t give any information that I could find about the reason (it would have been nice to have something put into the event log or something).

    I ultimately figured out this problem using Wine’s (!!) tracing facility. I wonder if the ‘checked’ version of Windows would give more information about the problem, but I was having a hell of a time getting that downloaded and installed.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Our project uses several third-party open-source libraries, some of which require custom modifications. For
Our project currently uses Crystal Reports for Visual Studio 2008. We need to upgrade
I have an old project at our company that uses shell scripting a lot.
Our project is running on Windows CE 6.0 and is written in C++ .
Our project uses an LDAP repository for storing users. In production this will be
We're using Criteria frequently in our project for dynamic query generation. I really love
We have a smallish C++ Linux project that accompanies our large C++/MFC Windows project.
Our project application uses Java 5 and now when I update Java 6, there
Our project uses Hibernate (3.3.2) with c3p0 as our connection pool. For a while,
Our project uses XJC to generate Java classes from an XSD. I'm using JAVA

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.