首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法编译brian gladman aes库

无法编译brian gladman aes库
EN

Stack Overflow用户
提问于 2011-01-18 11:11:33
回答 2查看 1.7K关注 0票数 1

我一直在从这里编译brian的库www.gladman.me.uk,我能够在我的本地机器(ubuntu10.10)上编译库,但是当我试图在我的远程机器(CentOS5.4)上编译时,它会在gcc上产生许多错误。

生成的错误是这里

谢天谢地。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-18 12:31:14

编译中的第一个错误是

代码语言:javascript
复制
brg_types.h:138:6: error: #error Please define uint_64t as an unsigned 64 bit type in brg_types.h

(前面只有可能指向问题的警告,但它们不会导致编译中断。)

问题是没有定义BRG_UI64,更具体地说,没有定义uint_64t类型。定义是在前面进行的。由于没有定义uint_64t,所以存在以下大多数问题,所以原因是相同的。

本质上,它在不同的无符号类型之间查找最大值为18446744073709551615u的第一个类型,即一个完整的无符号64位整数,并将其定义为uint_64t。如果没有找到任何类型,则使用#error引发上述错误。

因此,在您的远程系统上,UINT_MAX、ULONG_MAX、ULLONG_MAX或ULONG_LONG_MAX似乎都不是18446744073709551615。

您可以使用一个简单的程序来检查常量的值。

代码语言:javascript
复制
#include <limits.h>
#include <stdio.h>

int main()
{
  double d;

#if defined( UINT_MAX )
  d = UINT_MAX;
  printf("UINT_MAX is %f\n", d );
#if UINT_MAX == 18446744073709551615u
  printf("UINT_MAX satisfies condition\n");
#endif
#endif
#if defined( ULONG_MAX )
  d = ULONG_MAX;
  printf("ULONG_MAX is %f\n", d );
#if ULONG_MAX == 18446744073709551615ul
  printf("ULONG_MAX satisfies condition\n");
#endif
#endif
#if defined( ULLONG_MAX )
  d = ULLONG_MAX;
  printf("ULLONG_MAX is %f\n", d );
#if ULLONG_MAX == 18446744073709551615ull
  printf("ULLONG_MAX satisfies condition\n");
#endif
#endif
#if defined( ULONG_LONG_MAX )
  d = ULONG_LONG_MAX;
  printf("ULONG_LONG_MAX is %f\n", d );
#if ULONG_LONG_MAX == 18446744073709551615ull
  printf("ULONG_LONG_MAX satisfies condition\n");
#endif
#endif

  return 0;
}

在我的系统上(也许也包括在您的系统上),有几个版本的Lims.h和climits (由一些c++- included包含)。你可以用

代码语言:javascript
复制
find /usr/include -name '*limits*'

反正我也帮不了你移植图书馆。如果您不知道自己在做什么,我不认为自己定义一个类型是个好主意(尽管最大值更大的无符号整数类型可能有效)。

如果不同的编译器不能为您解决问题,最好是与作者联系以获得修复。

这些常量与系统和编译器有关.因此,它在本地(而不是在远程计算机上)工作的原因可能是:

  • 一个是32位机,另一个是64位。
  • gcc的不同版本
  • Ubuntu和CentOS安装了一个不同的限制。

这是那些可能比我更了解平台依赖的东西的人的代码。

代码语言:javascript
复制
#include <limits.h>
...
#ifndef BRG_UI64
#  if defined( __BORLANDC__ ) && !defined( __MSDOS__ )
#    define BRG_UI64
#    define li_64(h) 0x##h##ui64
     typedef unsigned __int64 uint_64t;
#  elif defined( _MSC_VER ) && ( _MSC_VER < 1300 )    /* 1300 == VC++ 7.0 */
#    define BRG_UI64
#    define li_64(h) 0x##h##ui64
     typedef unsigned __int64 uint_64t;
#  elif defined( __sun ) && defined( ULONG_MAX ) && ULONG_MAX == 0xfffffffful
#    define BRG_UI64
#    define li_64(h) 0x##h##ull
     typedef unsigned long long uint_64t;
#  elif defined( __MVS__ )
#    define BRG_UI64
#    define li_64(h) 0x##h##ull
     typedef unsigned int long long uint_64t;
#  elif defined( UINT_MAX ) && UINT_MAX > 4294967295u
#    if UINT_MAX == 18446744073709551615u
#      define BRG_UI64
#      define li_64(h) 0x##h##u
       typedef unsigned int uint_64t;
#    endif
#  elif defined( ULONG_MAX ) && ULONG_MAX > 4294967295u
#    if ULONG_MAX == 18446744073709551615ul
#      define BRG_UI64
#      define li_64(h) 0x##h##ul
       typedef unsigned long uint_64t;
#    endif
#  elif defined( ULLONG_MAX ) && ULLONG_MAX > 4294967295u
#    if ULLONG_MAX == 18446744073709551615ull
#      define BRG_UI64
#      define li_64(h) 0x##h##ull
       typedef unsigned long long uint_64t;
#    endif
#  elif defined( ULONG_LONG_MAX ) && ULONG_LONG_MAX > 4294967295u
#    if ULONG_LONG_MAX == 18446744073709551615ull
#      define BRG_UI64
#      define li_64(h) 0x##h##ull
       typedef unsigned long long uint_64t;
#    endif
#  endif
#endif
票数 5
EN

Stack Overflow用户

发布于 2011-01-18 12:32:54

第一个错误发生在brg_types.hat第138行;

代码语言:javascript
复制
brg_types.h:138:6: error: #error Please define uint_64t as an unsigned 64 bit type in brg_types.h

我发现这里是该文件的在线副本(可能是另一个版本)。因此,您需要找到如何创建64位无符号整数,并在该行前面添加一些定义,例如

代码语言:javascript
复制
#define BRG_UI64
#define li_64(h) 0x##h##ull
typedef unsigned long long uint_64t;

如果unsigned long long是64位,并且输入像0x123456789ull这样的文字数字。

看起来,在编译器上编译它需要更多的移植。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4723371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档