wayne 发表于 2013-6-7 10:06:36

11# G-Spider
这么细致入微, 彻底orz了 ,
我猜<绿色蜘蛛侠>是不是已经把gmp的源代码都啃完了?
======================
:lol

liangbch 发表于 2014-6-26 17:27:27

昨天搭建了一个MinGW64 64位编译环境,搭建过程中,首先参考了如下两个文档

MinGW64位交叉编译环境的安装和使用
   http://www.tuicool.com/articles/6NBviy

Compile Graphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64.
    http://www.kineticsystem.org/?q=node/19

搭建过程中,遇到了一些麻烦,主要是这个文档中提到的包不能使用(gcc不能用)。后来参考 http://ingar.satgnu.net/devenv/mingw32/base.html,
终于在64位win7成功的安装了MinGW64.


注:
按照文档, MinGW64应该能够交叉编译,也就是可在32位操作系统下编译成64位的应用程序,但这个文档中的包好像只能在64位环境运行,交叉编译没有搞定。


今天,在MinGW64上成功的编译出GMP6.0的64位dll,还没有使用,不知好用不好用。


下面是使用的命令
sh ./configure --prefix=/local64/dst/gmp/x86_64 --disable-static --enable-shared --enable-fat ABI=64
make
make check
make install

liangbch 发表于 2014-6-26 17:28:15

关于pexports。

pexports可在msys命令窗口中使用mingw-get来安装。
下面是我输入的命令和log,遇到一些错误,但pexports能用。

$ mingw-get install pexports
http://prdownloads.sourceforge.net/mingw/mingwrt-4.0.3-1-mingw32-dll.tar.lzma?download
12.79 kB / 12.79 kB   |================================================| 100%
http://prdownloads.sourceforge.net/mingw/w32api-4.0.3-1-mingw32-dev.tar.lzma?download
2.21 MB / 2.21 MB       |================================================| 100%
http://prdownloads.sourceforge.net/mingw/mingwrt-4.0.3-1-mingw32-dev.tar.lzma?download
686.10 kB / 686.10 kB   |================================================| 100%

http://prdownloads.sourceforge.net/mingw/binutils-2.24-1-mingw32-bin.tar.xz?download
0 B / 1.83 MB         |                                                |   0%
mingw-get.exe: *** ERROR *** Get package: http://prdownloads.sourceforge.net/mingw/binutils-2.24-1-mingw32-bin.tar.xz?download: download failed
http://prdownloads.sourceforge.net/mingw/gcc-core-4.8.1-4-mingw32-dev.tar.lzma?download
18.84 MB / 18.84 MB   |================================================| 100%ic
http://prdownloads.sourceforge.net/mingw/gcc-core-4.8.1-4-mingw32-bin.tar.lzma?download
855.15 kB / 855.15 kB   |================================================| 100%
http://prdownloads.sourceforge.net/mingw/pexports-0.46-mingw32-bin.tar.xz?download
178.61 kB / 178.61 kB   |================================================| 100%
http://prdownloads.sourceforge.net/mingw/pexports-0.46-mingw32-doc.tar.xz?download
4.39 kB / 4.39 kB       |================================================| 100%
http://prdownloads.sourceforge.net/mingw/pexports-0.46-mingw32-lic.tar.xz?download
6.55 kB / 6.55 kB       |================================================| 100%
http://prdownloads.sourceforge.net/mingw/binutils-2.24-1-mingw32-bin.tar.xz?download
0 B / 1.83 MB         |                                                |   0%
mingw-get.exe: *** ERROR *** Get package: http://prdownloads.sourceforge.net/mingw/binutils-2.24-1-mingw32-bin.tar.xz?download: download failed
install: libquadmath-4.8.1-4-mingw32-dll-0.tar
installing libquadmath-4.8.1-4-mingw32-dll-0.tar
install: libssp-4.8.1-4-mingw32-dll-0.tar
installing libssp-4.8.1-4-mingw32-dll-0.tar
install: mingwrt-4.0.3-1-mingw32-dll.tar.lzma
installing mingwrt-4.0.3-1-mingw32-dll.tar.lzma
install: w32api-4.0.3-1-mingw32-dev.tar.lzma
installing w32api-4.0.3-1-mingw32-dev.tar.lzma
install: mingwrt-4.0.3-1-mingw32-dev.tar.lzma
installing mingwrt-4.0.3-1-mingw32-dev.tar.lzma
install: binutils-2.24-1-mingw32-bin.tar.xz
mingw-get.exe: *** ERROR *** required package file is not available
mingw-get.exe: *** ERROR *** cannot install binutils-2.24-1-mingw32-bin.tar.xz
mingw-get.exe: *** ERROR *** due to previous download failure
install: gcc-core-4.8.1-4-mingw32-dev.tar.lzma
installing gcc-core-4.8.1-4-mingw32-dev.tar.lzma
install: gcc-core-4.8.1-4-mingw32-bin.tar.lzma
installing gcc-core-4.8.1-4-mingw32-bin.tar.lzma
install: pexports-0.46-mingw32-bin.tar.xz
installing pexports-0.46-mingw32-bin.tar.xz
install: pexports-0.46-mingw32-doc.tar.xz
installing pexports-0.46-mingw32-doc.tar.xz
install: pexports-0.46-mingw32-lic.tar.xz
installing pexports-0.46-mingw32-lic.tar.xz

liangbch 发表于 2014-6-27 01:27:31

经过一番努力,编译出来的64位dll 可以 被VC 和 MinGW 链接,并能成功的运行。
在VC下使用的64位动态库导入库文件的创建过程,和32位的稍有不同。

其一是需要使用VC2010中的lib.exe,在我的电脑上其路径是d:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\lib.exe.运行lib.exe,显示版本信息如下

Microsoft (R) Library Manager Version 10.00.30319.01
Copyright (C) Microsoft Corporation.All rights reserved.

usage: LIB

   options:

      /DEF[:filename]
      /ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
      /EXPORT:symbol
      /EXTRACT:membername
      /INCLUDE:symbol
      /LIBPATH:dir
      /LIST[:filename]
      /LTCG
      /MACHINE:{ARM|EBC|IA64|MIPS|MIPS16|MIPSFPU|MIPSFPU16|
                SH4|THUMB|X64|X86}
      /NAME:filename
      /NODEFAULTLIB[:library]
      /NOLOGO
      /OUT:filename
      /REMOVE:membername
      /SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
                  EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|
                  NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]]
      /VERBOSE
      /WX[:NO]

其二是,必须使用参数 /MACHINE:X64,否则在链接时,VC总是找不到gmp函数。




使用MinGW中的gcc编译时,源文件需要包含libgmp.dll.a. 下面是一个例子。

gcc gmp_test.c lib64/libgmp.dll.a -o gmp_test.exe

libgmp.dll.a 在运行make install 被创建,放在指定目录的lib子目录,和这个文件在同一目录的还有libgmp.la,这个文件很小,是一个文件格式的文件。

wayne 发表于 2014-6-29 08:57:13

要是我,就果断用 MSYS2
安装包用ArchLinux系统下的pacman管理的。

http://sourceforge.net/projects/msys2/files/?source=navbar

G-Spider 发表于 2014-6-29 22:30:34

wayne 发表于 2014-6-29 08:57
要是我,就果断用 MSYS2
安装包用ArchLinux系统下的pacman管理的。



试用了一下这个,挺不错的。
Pacman -Smingw-w64-i686-gmp   6.0.0的版本,
Pacman -S mingw-w64-x86_64-gmp 6.0.0的版本
免去了用mingw编译的过程。
然后尝试在vc下调用。(32、64类似)
1. dumpbin C:\msys64\mingw32\bin\libgmp-10.dll编辑生成libgmp-10.def,接着用lib.exe生成libgmp-10.lib文件。
2. 取头文件C:\msys64\mingw32\include\gmp.h
3. 测试。
test api的时候正常。但gmp_version出了问题。需要把__GMP_LIBGMP_DLL定义为1,如下。

#if ! defined (__GMP_WITHIN_CONFIGURE)
/* #undef _LONG_LONG_LIMB */
#define __GMP_LIBGMP_DLL1    /////////修改为1
#endif

为了:
#define __GMP_DECLSPEC__GMP_DECLSPEC_IMPORT

C:\test>gmptest.exe
gmp_version=6.0.0
gcd(13703703579,29012345415) = 123456789

50! =30414093201713378043612608166064768844377641568960512000000000000:
in base 36:    4q7eyp9zizmtqt0648txt4fm720cc1s00000000000

the 50th fibonacci number is:
12586269025

Binomial number C(13703703579,50) is:
22846668830250302431236479513199364822522975305215687478104351516702478015891637
70703600366179623500768194162432677898079581129267152021695401533423899442942747
17242545601139565609076669349824314705680709198462126559406915727639941541041820
74867532302113577960713768401713233550081408594530699809931993030746113827481556
30101915884369152485932802348772391158104758203529507383994826431818959228614307
9975941045589770391072556115998313884002528

13703703579^50 =:
69486077726683000331812758309215230412934883797359560426588294139022549218964675
80885309450708521831132589954969510958219429615807349907578721220179433449966217
48382306696989343046961104312394725686535029713965226604862871144248807200831961
76203244619376083819864528325831495174248273564897279634532378880540890185744125
07649744175780535091438615069925963474977080072383849937730236025990606794720942
62027675397255488137699620308453365116116828037972332454364712106142736503723811
279165134211637273579711001

pi^4+pi^5=403.42877581928389049918164273214071773002829230076041
e^6      =403.42879349273512260838718054338827960589989735712920

wayne 发表于 2014-7-1 00:13:30

G-Spider 发表于 2014-6-29 22:30
试用了一下这个,挺不错的。
Pacman -Smingw-w64-i686-gmp   6.0.0的版本,
Pacman -S mingw-w64-x86 ...

有木有兴趣写一个android版本的apk,调GMP的那种 .
我打算有空搞一搞,思路都有了,就差时间了。

G-Spider 发表于 2014-7-1 21:13:42

放一下#16楼做好的32位和64位的版本。备份一下。
gmp 6.0.0 x64
gmp 6.0.0 x86

(似乎不能上传附件,给个链接了)

xiaoshunzi 发表于 2014-7-11 07:53:26

用msys + tdm gcc 4.8.1编了一个专门给vs2010用的,主要不同是库函数和后头写的代码都是调用msvcr100或者msvcr100d,避免FILE相关函数崩溃问题,有兴趣位的可从下面连接下载试试...

http://share.weiyun.com/50f6d613c69e3f336d62b6f18549a9fe

wayne 发表于 2014-7-11 08:20:26

xiaoshunzi 发表于 2014-7-11 07:53
用msys + tdm gcc 4.8.1编了一个专门给vs2010用的,主要不同是库函数和后头写的代码都是调用msvcr100或者ms ...

重在交流。结果倒是其次的。
用gcc编译,却针对vs2010 ? 能否谈谈思路?
页: 1 [2] 3
查看完整版本: 在Windows下编译GMP以供VC使用