打造windows下的嵌入式开发工具(3):gmp-4.2.3

来源:互联网 发布:淘宝买到二手货怎么办 编辑:程序博客网 时间:2024/05/17 07:30

快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

  

 

本文适用于

ADI Blackfin系列DSP

优视科技BV561EVB开发板

gcc-4.3.1

binutils-2.18

codeblocks-8.02

Skyeye-1.2.5

bfin-uclinux-2008r1-rc8

Cygwin gcc 3.4.4

Visual studio 2005

Visual DSP++ 5.0

  

欢迎转载,但请保留作者信息

 

 

gmplib是一个用于大数运算的库,在gcc-4.3.1中使用了它。其官方网站为http://gmplib.org/,目前的版本是4.2.3。在这个版本中,并没有提供在vs2005下的port,但是在http://fp.gladman.plus.com/computing/gmp4win.htmGladman提供了gmp-4.2.3vs2008下的工程文件http://fp.gladman.plus.com/computing/gmp-4.2.3.vc9.zip。将它们都解压缩到gmp-4.2.3

在使用这个工程文件之前必须先做一个转换,这样vs2005才能识别。

按照Gladman提供的readme.txt中的说法,将.vcproj工程文件中的

    Version="9.00"

替换为

    Version="8.00"

然后将.sln文件中的

Microsoft Visual Studio Solution File, Format Version 10.00

# Visual Studio 2008

改为:

Microsoft Visual Studio Solution File, Format Version 9.00

# Visual Studio 2005

这样就可以直接在vs2005下打开gmp.sln这个工程了。

在编译之前还有一件事要做。在Gladman提供的压缩包里有一个longlong.h的文件,这个文件中有这样一段代码:

#ifdef _MSC_VER

#  include <intrin.h>

 

 

#  if defined( _WIN64 )

#    define count_leading_zeros(c,x)        /

      do {                                  /

        ASSERT ((x) != 0);                  /

        _BitScanReverse64(&c, (x));         /

        c = 63 - c;                         /

      } while (0)

#    define count_trailing_zeros(c,x)       /

      do {                                  /

        ASSERT ((x) != 0);                  /

        _BitScanForward64(&c, (x));         /

      } while (0)

#    define umul_ppmm(xh, xl, m0, m1)       /

      do {                                  /

        xl = _umul128( (m0), (m1), &xh);    /

      } while (0)

#  else

#    define count_leading_zeros(c,x)        /

      do {                                  /

        ASSERT ((x) != 0);                  /

        _BitScanReverse(&c, (x));           /

        c = 31 - c;                         /

      } while (0)

#    define count_trailing_zeros(c,x)       /

      do {                                  /

        ASSERT ((x) != 0);                  /

        _BitScanForward(&c, (x));           /

      } while (0)

#    define umul_ppmm(xh, xl, m0, m1)       /

      do { unsigned __int64 _t;             /

        _t = __emulu( (m0), (m1));          /

        xl = _t & 0xffffffff;               /

        xh = _t >> 32;                      /

      } while (0)

#  endif

 

#endif

这一段代码在vs2005下编译的时候将引起__emulu_BitScanForward函数的链接错误。按照Gladman的建议,这一段代码可以直接删除,但是实际上直接在这段代码的前面加上

#pragma intrinsic(_BitScanReverse)

#pragma intrinsic(_BitScanForward)

#pragma intrinsic(__emul)

#pragma intrinsic(__emulu)

也可以解决这个问题。引发这个问题的原因可以查msdn中的相关函数说明。

经过这两个修改后,直接在vs2005build,将在gmp-4.2.3/build.vc9/lib/Win32/Debug目录下生成gmp.hgmp.lib,这是一个静态库文件,可以供gcc-4.3.1使用。

 

 

 

参考资料

host-i686-pc-cygwin/libiberty/Makefile解析(2008-8-19)

host-i686-pc-cygwin/fixincludes/Makefile分析(2008-8-19)

host-i686-pc-cygwin/zlib/Makefile分析(2008-8-19)

host-i686-pc-cygwin/libcpp/Makefile分析(2008-8-19)

host-i686-pc-cygwin/libdecnumber/Makefile分析(2008-8-19)

bfin-xxx-gcccc1plus.exe的生成2008-08-23

bfin-xxx-gccfortran目标的生成(2008-8-24)

bfin-xxx-gccjava目标的生成(2008-8-24)

bfin-xxx-gccobjc目标的生成(2008-8-26)

bfin-xxx-gcccollect2目标的生成(2008-8-26)

打造windows下的嵌入式开发工具(1):目标(2008-9-3)

打造windows下的嵌入式开发工具(2)binutils-2.18(2008-9-3)

 

 

 

原创粉丝点击