[BACK]Return to gmp-on-Windows.txt CVS log [TXT][DIR] Up to [local] / OpenXM / doc / HOWTO

File: [local] / OpenXM / doc / HOWTO / gmp-on-Windows.txt (download)

Revision 1.2, Wed Sep 16 06:48:05 2015 UTC (8 years, 7 months ago) by fujimoto
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +58 -3 lines

Added a description of win32threads gcc in order to make DLLs which does not depend on libgcc_s_*.dll.

Windows $B$K$*$1$k(B GMP/MPFR/MPC $B$N%S%k%IK!(B

Risa/Asir $B$N%i%$%;%s%9$NET9g>e!"(BLGPL $B$N%i%$%V%i%j$H$OF0E*7k9g$9$kI,MW$,$"$k!#(B
$B$3$NJ8=q$G$O!"(BWindows $B$K$*$$$F(B GNU MP ($B$^$?$O(B MPIR), MPFR, MPC $B$NF0E*%i%$%V%i%j(B
(*.dll)$B$*$h$S%$%s%]!<%H%i%$%V%i%j(B(*.lib)$B$r:n@.$9$kJ}K!$r@bL@$9$k!#(B

$BBh0lIt(B: Visual Studio 2013$BJT(B

1. $B=`Hw(B

MPIR, MPFR, MPC $B$N%=!<%9$rE,Ev$J%G%#%l%/%H%j(B($BNc(B: c:\Users\ohara\OpenXM_dist )
$B$KMQ0U$9$k!#$3$3$G$O!"0J2<$N%P!<%8%g%s$rMQ$$$k!#(B

mpir-2.7.0.zip
mpfr-3.1.3.tar.bz2
mpc-1.0.3.tar.gz

$B$^$?!"(Bmpfr, mpc $B$K$D$$$F$O!"(Bhttp://www.gladman.me.uk/ $B$+$i(B
Visual Studio $BMQ$N%W%m%8%'%/%H%U%!%$%k$rF~<j$9$k!#$"$o$;$F(B
vsyasm $B$b%$%s%9%H!<%k$7$F$*$/$3$H!#(B

$B$^$:!"$=$l$>$l$N%=!<%9$rE83+$9$k!#(B(mingw $B$r;H$&!#E,;~!"FI$_$+$($k$3$H(B)

d=/c/Users/ohara/OpenXM_dist
unzip $d/mpir-2.7.0.zip
tar jxf $d/mpfr-3.1.3.tar.bz2
tar zxf $d/mpc-1.0.3.tar.gz
for i in mpir-2.7.0 mpfr-3.1.3 mpc-1.0.3; do mv $i ${i%-*}; done
(cd mpfr; unzip $d/mpfr.svn9046.build.vc12.zip;
 cd src; touch fpif.c  get_float128.c  rndna.c  set_float128.c;
 cd x86_64; cp -Rp core2 corei5)
(cd mpfr; unzip $d/mpc.svn1450.build.vc12.zip)


2. MPIR $B$N%S%k%I(B

mpir/build.vc12/mpir.sln $B$r3+$/!#(B

$B<B9T;~$K(B msvcr120.dll (Visual C++ $B:FHRI[2DG=%Q%C%1!<%8(B) $B$K0MB8$7$J$$$h(B
$B$&$K!"(Bdll $B$r:n@.$9$k$?$a$K!"%j%s%+$N@_Dj$rJQ99$9$k!#%/%i%9%S%e!<$G!"(B
dll_mpir_gc $B$N%W%m%Q%F%#$r3+$-!"!V9=@.%W%m%Q%F%#!W(B->$B!V(BC/C++$B!W(B->
$B!V%3!<%I@8@.!W(B->$B!V%i%s%?%$%`%i%$%V%i%j!W$,!"(BRelease/Win32 $B$N$H$-$K!"(B
$B!V%^%k%A%9%l%C%I(B(/MT)$B!W$G$"$k$3$H$r3NG'$9$k!#(BRelease/Win32 $B$K$D$$$F!"(B
dll_mpir_gc $B$r%S%k%I$9$k!#(B

$B$^$?!"%/%i%9%S%e!<$G!"(Bdll_mpir_core2 $B$N%W%m%Q%F%#$r3+$-!"F1$8$h$&$K!"(B
$B!V%i%s%?%$%`%i%$%V%i%j!W$,!"(BRelease/x64 $B$N$H$-$K!"(B
$B!V%^%k%A%9%l%C%I(B(/MT)$B!W$G$"$k$3$H$r3NG'$9$k!#(BRelease/x64 $B$K$D$$$F!"(B
dll_mpir_core2 $B$r%S%k%I$9$k!#(B

$B@8@.J*$O!"(Bmpir/dll/{Win32,x64}/Release/ $B$K$"$k!#(B


3. MPFR $B$N%S%k%I(B

mpir/build.vc12/dll_mpfr.sln $B$r3+$/!#(B

******** $B$3$N%W%m%8%'%/%H%U%!%$%k$K$O%P%0$,$"$k!#(B ******** 

$B%/%i%9%S%e!<$G!"(Bdll_mpfr $B$N%W%m%Q%F%#$r3+$-!"!V9=@.%W%m%Q%F%#!W(B->
$B!V(BC/C++$B!W(B->$B!V%3!<%I@8@.!W(B->$B!V%W%j%W%m%;%C%5!W(B->$B!V%W%j%W%m%;%C%5$NDj5A!W(B
$B$r3NG'$7!"(BRelease/Win32 $B$N$H$-$K!"!V(B_WIN64$B!W$NDj5A$r:o=|$9$k!#(B

******** $B$3$l$G%P%0$N=$@5$O40N;$G$"$k!#(B ******** 

$B<!$K!"!V%i%s%?%$%`%i%$%V%i%j!W$,!"(BRelease/Win32 $B$*$h$S(B Release/x64 
$B$N$H$-$K!"!V%^%k%A%9%l%C%I(B(/MT)$B!W$G$"$k$3$H$r3NG'$9$k!#(B

Release/Win32 $B$*$h$S(B Release/x64 $B$K$D$$$F!"(Bdll_mpfr $B$r%S%k%I$9$k!#(B

$B@8@.J*$O!"(Bmpfr/dll/{Win32,x64}/Release/ $B$K$"$k!#(B

4. MPC $B$N%S%k%I(B

mpc/build.vc12/mpc.sln $B$r3+$/!#<!$K%/%i%9%S%e!<$G!"(Bmpc_dll $B$N%W%m%Q%F%#$r3+$-!"(B
$B!V9=@.%W%m%Q%F%#!W(B->$B!V(BC/C++$B!W(B->$B!V%3!<%I@8@.!W(B->$B!V%i%s%?%$%`%i%$%V%i%j!W$,!"(B
Release/Win32 $B$*$h$S(B Release/x64 $B$N$H$-$K!"!V%^%k%A%9%l%C%I(B(/MT)$B!W$G$"$k$3$H$r3NG'$9$k!#(B

Release/Win32 $B$*$h$S(B Release/x64 $B$K$D$$$F!"(Bmpc_dll $B$r%S%k%I$9$k!#(B

$B@8@.J*$O!"(Bmpc/dll/{Win32,x64}/Release/ $B$K$"$k!#(B


5. $B%S%k%I$N8e(B

{mpir,mpfr,mpc}/dll/{Win32,x64}/Release/ 
$B$K%U%!%$%k$,@8@.$5$l$k!#(B

$B:G=*E*$KI,MW$JJ*$O!"(B
$B%X%C%@(B gmp.h, gmpxx.h, mpfr.h, mpc.h
$BF0E*%i%$%V%i%j(B mpir.dll, mpfr.dll, mpc.dll
$B%$%s%]!<%H%i%$%V%i%j(B mpir.lib, mpfr.lib, mpc.lib
$B$G$"$k!#(B


$BBhFsIt(B: MinGW $BJT(B

mingw/msys2 $B$N%$%s%9%H!<%kJ}K!$K$D$$$F$O!"(B
how_to_install_MinGW-MSYS2.txt $B$r;2>H$N$3$H!#(B

1. $B35@b!&J}?K(B

$B@EE*%i%$%V%i%j$N@8@.$rHr$1$k$?$a!"(Bconfigure $B$N%*%W%7%g%s$K!"(B
--enable-shared --disable-static
$B$r2C$($k$3$H$H$9$k!#(B

$B$5$i$K!"Hs(B mingw $B4D6-$G$b<B9T2DG=$J%i%$%V%i%j$r:n@.$7$?$$!#(B

$B$3$3$GLdBj$K$J$k$N$,!"(Bmingw $B$K$*$1$kNc30=hM}$NJ}K!$G$"$k!#(BWindows $B$NI8(B
$B=`(B(= VisualStudio)$B$G$O!"(BSEH ($B9=B$2=Nc30=hM}(B)$B$r;H$&$3$H$K$J$C$F$$$F!"(B
MinGW 64 $B$G$O!"(Bgcc $B$b%5%]!<%H$9$k!#(B

$B$7$+$7$J$,$i!"(BMinGW 32 $B$N(B gcc $B$O(B dwarf-2 $BNc30=hM}$r;HMQ$7!"(BSEH $B$O%5%]!<(B
$B%H$7$F$$$J$$!#$=$N$?$a!"$3$l$r<B8=$9$k(B libgcc_s_dw2-1.dll $B$H%j%s%/$7$h(B
$B$&$H$9$k!#$3$l$rHr$1$k$K$O!"(Bgcc $B$K%*%W%7%g%s(B -static-libgcc $B$rM?$($k$+!"(B
win32threads $B$J(B gcc $B$r;HMQ$9$k!#8e<T$K$D$$$F$O!"(Bhow_to_install_MinGW-MSYS2.txt
$B$N(B 3 $B@a$r;2>H$N$3$H!#(B


2. $B%S%k%I(B

GNU MP, MPFR, MPC $B$N%=!<%9$rE,Ev$J%G%#%l%/%H%j(B($BNc(B: c:\Users\ohara\OpenXM_dist )
$B$KMQ0U$9$k!#$3$3$G$O!"0J2<$N%P!<%8%g%s$rMQ$$$k!#(B

gmp-5.1.3.tar.gz
mpfr-3.1.3.tar.bz2
mpc-1.0.3.tar.gz

$BIUO?(B1 $B$^$?$OIUO?(B2 $B$GM?$($k%7%'%k%9%/%j%W%H(B mk.sh $B$r<B9T$7$F!"%i%$%V%i%j$r:n@.$9$k!#(B
$B@8@.J*$O!"(B${LOCAL}/{bin,include,lib} $B$K=PNO$5$l$k!#(B


3. Visual Studio $BMQ%$%s%]!<%H%i%$%V%i%j(B

mingw $BIUB0$N(B gendef $B$N=PNO$9$k(B *.def $B$r!"(BMS lib.exe $B$G=hM}$9$k$3$H$K$h$j!"(B
$B%$%s%]!<%H%i%$%V%i%j$r:n@.$G$-$k!#6qBNE*$K$O!"IUO?(B3 $B$GM?$($k%P%C%A%U%!%$%k$r(B
*.def $B$NB8:_$9$k%G%#%l%/%H%j(B (${LOCAL}/bin) $B$G<B9T$9$k$H$h$$!#(B

A. $BIUO?(B1

$B!V(Bmingw-w64 win64 shell$B!W$^$?$O!V(Bmingw-w64 win32 shell$B!W>e$G<B9T$9$k%7%'%k%9%/%j%W%H$G$"$k!#(B

#!/bin/bash

LOCAL=/usr/local"${MSYSTEM#MINGW}"
[ -d ${LOCAL} ] || mkdir -p ${LOCAL}

dist=/c/Users/ohara/OpenXM_dist
gmp=gmp-5.1.3
mpf=mpfr-3.1.3
mpc=mpc-1.0.3

for i in ${gmp}.tar.gz ${mpf}.tar.bz2 ${mpc}.tar.gz ; do case "$i" in *.bz2) tar jxf ${dist}/"$i";; *.gz) tar zxf ${dist}/"$i";; esac; done

pushd ${gmp}
./configure --prefix=${LOCAL} --enable-shared --disable-static --disable-cxx
make
if [ "$MSYSTEM" = MINGW32 ]; then
	gcc -static-libgcc -shared .libs/*.o */.libs/*.o -m32 -Wl,--export-all-symbols -Wl,--output-def -Wl,.libs/libgmp-3.dll.def -o .libs/libgmp-10.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libgmp.dll.
a
fi
make install
(cd .libs; gendef libgmp-10.dll; cp -p libgmp-10.def ${LOCAL}/bin)
popd

pushd ${mpf}
./configure --prefix=${LOCAL} --enable-shared --disable-static --with-gmp=${LOCAL} --disable-thread-safe
make 
if [ "$MSYSTEM" = MINGW32 ]; then
	cd src
	gcc -static-libgcc -shared .libs/*.o -L${LOCAL}/lib ${LOCAL}/lib/libgmp.dll.a -m32 -Wl,--output-def -Wl,.libs/libmpfr-4.dll.def -o .libs/libmpfr-4.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libmpfr.dll.a
	cd ..
fi
make install
(cd src/.libs; gendef libmpfr-4.dll; cp -p libmpfr-4.def ${LOCAL}/bin)
popd

pushd ${mpc}
./configure --prefix=${LOCAL} --enable-shared --disable-static --with-gmp=${LOCAL} --with-mpfr=${LOCAL}
make 
if [ "$MSYSTEM" = MINGW32 ]; then
	cd src
    gcc -static-libgcc -shared .libs/*.o -L${LOCAL}/lib ${LOCAL}/lib/libmpfr.dll.a ${LOCAL}/lib/libgmp.dll.a -m32 -o .libs/libmpc-3.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libmpc.dll.a
	cd ..
fi
make install
(cd src/.libs; gendef libmpc-3.dll; cp -p libmpc-3.def ${LOCAL}/bin)
popd


B. $BIUO?(B2

$B!V(BMinGW-w64 Win64 Shell w32threads$B!W$^$?$O!V(BMinGW-w64 Win32 Shell w32threads$B!W>e$G<B9T$9$k%7%'%k%9%/%j%W%H$G$"$k!#(B

#!/bin/bash

LOCAL=/usr/local"${MSYSTEM#MINGW}"
[ -d ${LOCAL} ] || mkdir -p ${LOCAL}

dist=/c/Users/ohara/OpenXM_dist
gmp=gmp-5.1.3
mpf=mpfr-3.1.3
mpc=mpc-1.0.3

for i in ${gmp}.tar.gz ${mpf}.tar.bz2 ${mpc}.tar.gz ; do case "$i" in *.bz2) tar jxf ${dist}/"$i";; *.gz) tar zxf ${dist}/"$i";; esac; done

pushd ${gmp}
./configure --prefix=${LOCAL} --enable-shared --disable-static --disable-cxx
make
if [ "$MSYSTEM" = MINGW32 ]; then
	gcc -shared .libs/*.o */.libs/*.o -m32 -Wl,--export-all-symbols -Wl,--output-def -Wl,.libs/libgmp-3.dll.def -o .libs/libgmp-10.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libgmp.dll.
a
fi
make install
(cd .libs; gendef libgmp-10.dll; cp -p libgmp-10.def ${LOCAL}/bin)
popd

pushd ${mpf}
./configure --prefix=${LOCAL} --enable-shared --disable-static --with-gmp=${LOCAL} --disable-thread-safe
make 
if [ "$MSYSTEM" = MINGW32 ]; then
	cd src
	gcc -shared .libs/*.o -L${LOCAL}/lib ${LOCAL}/lib/libgmp.dll.a -m32 -Wl,--output-def -Wl,.libs/libmpfr-4.dll.def -o .libs/libmpfr-4.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libmpfr.dll.a
	cd ..
fi
make install
(cd src/.libs; gendef libmpfr-4.dll; cp -p libmpfr-4.def ${LOCAL}/bin)
popd

pushd ${mpc}
./configure --prefix=${LOCAL} --enable-shared --disable-static --with-gmp=${LOCAL} --with-mpfr=${LOCAL}
make 
if [ "$MSYSTEM" = MINGW32 ]; then
	cd src
    gcc -shared .libs/*.o -L${LOCAL}/lib ${LOCAL}/lib/libmpfr.dll.a ${LOCAL}/lib/libgmp.dll.a -m32 -o .libs/libmpc-3.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libmpc.dll.a
	cd ..
fi
make install
(cd src/.libs; gendef libmpc-3.dll; cp -p libmpc-3.def ${LOCAL}/bin)
popd

C. $BIUO?(B3

$B%3%^%s%I%W%m%s%W%H>e$G<B9T$9$k%P%C%A%U%!%$%k$G$"$k!#(B
$B4D6-$K$h$j(B 32bit $B$^$?$O(B 64bit $B$N%i%$%V%i%j$,@8@.$5$l$k$3$H$KCm0U!#(B

@echo off
lib /def:libmpc-3.def  /out:libmpc-3.lib
lib /def:libmpfr-4.def /out:libmpfr-4.lib
lib /def:libgmp-10.def /out:libgmp-10.lib