Boost线程和UPX压缩 == 不是有效的Win32应用程序?

7
当我刚刚声明时
boost::thread t1, t2;

在我的程序中使用UPX压缩.exe文件后,压缩成功。但是当我尝试启动压缩后的exe时,Windows告诉我它不是“有效的win32应用程序”。
UPX有一个错误报告(类似的错误),但它有不同的错误消息(“应用程序无法正确初始化(0xc0000005)”)。
在我的情况下,操作系统认为文件已损坏或其他原因,因此无法启动以显示错误!为什么??
Win7x64,C ++,VisualStudio,boost 1.47,UPX3.07
奇怪的消息:
  1. 解包exe会使得损坏的exe文件,会抛出与这里相同的错误。(“应用程序无法正常启动(0xc0000005)”)而且这是针对已解包的exe,不是报告中打包的情况。

  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;
}

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


1
你的构建是否使用boost设置为32位可执行文件,还是64位可执行文件?(Windows上的UPX不支持64位二进制文件)http://sourceforge.net/tracker/?func=detail&aid=2859708&group_id=2331&atid=352331 - HostileFork says dont trust SE
尝试了另一个打包程序,它只是写道“不支持tls回调函数”。 - Sergey
3
解压缩会使得你获得一个可用的EXE文件吗?关于TLS,据说自UPX v3.06(2010年9月)以来,它支持线程局部存储。但是,如果UPX中的问题与处理线程局部存储有关,您可以尝试在包含boost线程头文件之前放置extern "C" void tss_cleanup_implemented(void) {},如此较旧的错误报告所述:https://svn.boost.org/trac/boost/ticket/1848 - HostileFork says dont trust SE
@HostileFork,我添加了一些信息。 - Sergey
@Ferruccio,都试过了!结果一样! - Sergey
显示剩余4条评论
1个回答

1

新版本3.08中已修复了错误。现在没问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接