这里主要在Windows上使用MingW编译.
UPX相关下载,这里尽量使用git
git clone https://github.com/upx/upx.git
cd upx
git clone https://github.com/upx/upx-lzma-sdk.git lzma-sdk
关于ucl,这个要手动下载(采用浏览器,主要MingW没安装wget)
http://www.oberhumer.com/opensource/ucl/download/ucl-1.03.tar.gz
ucl 解压和编译
进行解压
tar -xzvf ucl-1.03.tar.gz
cd ucl-1.03
开始编译
./configure --prefix=/e/opensource/mymono/upx/
遇到下图:
遇到ACC一致性测试失败.在网上找资料说是gcc的一个bug,在GCC 6的时候,我本地上gcc是9.1.0,最后找到解决方法.关于 GCC 版本 6.1.0 及更高版本的注意事项在这里
具体解决方法: https://github.com/mxe/mxe/commit/0ac2a77
查看config.log,看ACC error在哪里出现的.主要看gcc 编译conftest.c参数.
然后在configure文件中,查找CFLAGS为-g -O2,并在后面加上-std=gnu90 -fPIC
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2 -std=gnu90 -fPIC"
else
CFLAGS="-g"
fi
else
if test "$GCC" = yes; then
CFLAGS="-O2 -std=gnu90 -fPIC"
else
CFLAGS=
fi
fi
编译UPX
make all UPX_UCLDIR=/e/opensource/mymono/upx/ucl-1.03 UPX_LZMADIR=./src/lzma-sdk
找到src目录中,找upx.out文件,将out后缀改为exe.可以在编译之前去src目录下,在Makefile修改生成文件的后缀名.
UPX 运行效果