C++ Boost线程和UPX压缩==无效的win32应用程序?

C++ Boost线程和UPX压缩==无效的win32应用程序?,c++,visual-studio,boost,boost-thread,upx,C++,Visual Studio,Boost,Boost Thread,Upx,我刚申报的时候 boost::thread t1, t2; 在我的程序中,然后用UPX压缩.exe文件,压缩成功。但当我尝试启动压缩的exe时,Windows告诉我它是“无效的win32应用程序” UPX()有错误报告,但有不同的错误消息(“应用程序未能正确初始化(0xc0000005)”) 在我的情况下,操作系统认为该文件已损坏或其他东西,因此它甚至无法启动以显示错误!为什么 Win 7x64,C++,VisualStudio,Boost 1.47,Upx3.07 奇怪的消息: 解包exe

我刚申报的时候

boost::thread t1, t2;
在我的程序中,然后用UPX压缩.exe文件,压缩成功。但当我尝试启动压缩的exe时,Windows告诉我它是“无效的win32应用程序”

UPX()有错误报告,但有不同的错误消息(“应用程序未能正确初始化(0xc0000005)”)

在我的情况下,操作系统认为该文件已损坏或其他东西,因此它甚至无法启动以显示错误!为什么

Win 7x64,C++,VisualStudio,Boost 1.47,Upx3.07

奇怪的消息:

  • 解包exe使损坏的exe抛出的错误完全相同 作为。(“应用程序未能正确初始化 (0xc0000005)”),这是用于未打包的exe,而不是像bug中那样打包 报告

  • extern“C”void tss\u cleanup\u实现(void){}
    在加入boost之前,线程头并不重要。这个 结果是一样的

  • main.cpp:

    #include <boost/thread.hpp>
    
    int main(int argc, char** argv)
    {
        boost::thread t;
        return 0;
    }
    
    #包括
    int main(int argc,字符**argv)
    {
    boost::线程t;
    返回0;
    }
    

    可能有人会尝试编译和压缩?

    新版本3.08中修复了此错误。现在一切正常。

    那么,您的构建是使用boost进行设置,从而生成32位可执行文件,还是64位可执行文件?(windows上的UPX不支持64位二进制文件)尝试了另一个打包程序,它只写了“不支持tls回调”解压是否会使您返回一个可工作的EXE?至于TLS,自v3.06(2010年9月)以来,据说UPX支持线程本地存储。但是,如果UPX中的问题与线程本地存储的处理有关,您可能可以通过将
    extern“C”void tss_cleanup_implemented(void){}
    放在包含boost的线程头之前来解决它,如旧的错误报告中所述:@HostileFork,我添加了一些信息,您是静态链接boost线程库还是动态链接boost线程库?