【问题标题】:Boost thread and UPX compression == not valid win32 application?提升线程和 UPX 压缩 == 无效的 win32 应用程序?
【发布时间】:2012-01-05 21:25:26
【问题描述】:

当我刚刚声明时

boost::thread t1, t2;

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

有一个关于 UPX 的错误报告 (similar bug),但它有不同的错误消息(“应用程序未能正确初始化 (0xc0000005)”)。

在我的情况下,操作系统认为文件已损坏或其他原因,因此它甚至无法开始显示错误!为什么??

Win7x64、C++、VisualStudio、boost 1.47、UPX3.07

奇怪的消息:

  1. 解压 exe 会使损坏的 exe 引发完全相同的错误 作为here。 ("应用程序未能正确初始化 (0xc0000005)") 这是解压后的 exe,不像 bug 那样打包 报告。

  2. extern "C" void tss_cleanup_implemented(void) {} 在包含 boost 的线程头之前并不重要。这 结果是一样的。

main.cpp:

#include <boost/thread.hpp>

int main(int argc, char** argv)
{
    boost::thread t;
    return 0;
}

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

【问题讨论】:

  • 那么,您的构建是否设置了 boost 以生成 32 位可执行文件,还是 64 位可执行文件? (Windows 上的 UPX 不支持 64 位二进制文​​件)sourceforge.net/tracker/…
  • 尝试了另一个打包程序,它只是写“不支持 tls 回调”
  • 解压缩是否可以让您恢复正常工作的 EXE?至于 TLS,据说 UPX 从 v3.06(2010 年 9 月)开始支持线程本地存储。但是,如果 UPX 中的问题与线程本地存储的处理有关,您可以通过在包含 boost 的线程标头之前放置 extern "C" void tss_cleanup_implemented(void) {} 来解决它,如此旧错误报告中所述:svn.boost.org/trac/boost/ticket/1848
  • @HostileFork,我添加了一些信息
  • 你是静态链接还是动态链接boost线程库?

标签: c++ visual-studio boost boost-thread upx


【解决方案1】:

在新版本 3.08 中修复了错误。现在好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多