打造windows下的嵌入式开发工具(3):gmp-4.2.3
2019-07-13 15:04发布
生成海报
快乐虾
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.htm,Gladman提供了gmp-4.2.3在vs2008下的工程文件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
# 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中的相关函数说明。
经过这两个修改后,直接在vs2005下build,将在gmp-4.2.3/build.vc9/lib/Win32/Debug目录下生成gmp.h和gmp.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-gcc中cc1plus.exe的生成(2008-08-23)
bfin-xxx-gcc中fortran目标的生成(2008-8-24)
bfin-xxx-gcc中java目标的生成(2008-8-24)
bfin-xxx-gcc中objc目标的生成(2008-8-26)
bfin-xxx-gcc中collect2目标的生成(2008-8-26)
打造windows下的嵌入式开发工具(1):目标(2008-9-3)
打造windows下的嵌入式开发工具(2):binutils-2.18(2008-9-3)
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮