arm-hisiv500-linux安装,解决arm-hisiv500-linux编译Poco时,Foundation中FPEnvironme

目录

前言

一、问题原因

二、解决方法

前言

上篇博文《C++ Poco库编译方法》中曾经提到使用arm-hisiv500-linux编译poco时,由于编译器未包含fenv.h,导致Foundation中FPEnvironment_C99类编译失败,说的不是很清晰,今天特地详细的讲解下解决方法。

一、问题原因

arm-hisiv500-linux编译器默认未自带fenv.h,而FPEnvironment_C99类中使用了几个宏定义,正是在Fenv.h中定义的。

二、解决方法

1、/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/usr/include路径下新建fenv.h文件

/* Copyright (C) 1997-2014 Free Software Foundation, Inc.

This file is part of the GNU C Library.

The GNU C Library is free software; you can redistribute it and/or

modify it under the terms of the GNU Lesser General Public

License as published by the Free Software Foundation; either

version 2.1 of the License, or (at your option) any later version.

The GNU C Library is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public

License along with the GNU C Library; if not, see

.  */

/*

* ISO C99 7.6: Floating-point environment   

*/

#ifndef _FENV_H

#define _FENV_H    1

#include

/* Get the architecture dependend definitions.  The following definitions

are expected to be done:

fenv_t    type for object representing an entire floating-point

environment

FE_DFL_ENV    macro of type pointer to fenv_t to be used as the argument

to functions taking an argument of type fenv_t; in this

case the default environment will be used

fexcept_t    type for object representing the floating-point exception

flags including status associated with the flags

The following macros are defined iff the implementation supports this

kind of exception.

FE_INEXACT        inexact result

FE_DIVBYZERO        division by zero

FE_UNDERFLOW        result not representable due to underflow

FE_OVERFLOW        result not representable due to overflow

FE_INVALID        invalid operation

FE_ALL_EXCEPT    bitwise OR of all supported exceptions

The next macros are defined iff the appropriate rounding mode is

supported by the implementation.

FE_TONEAREST        round to nearest

FE_UPWARD        round toward +Inf

FE_DOWNWARD        round toward -Inf

FE_TOWARDZERO    round toward 0

*/

#include

__BEGIN_DECLS

/* Floating-point exception handling.  */

/* Clear the supported exceptions represented by EXCEPTS.  */

extern int feclearexcept (int __excepts) __THROW;

/* Store implementation-defined representation of the exception flags

indicated by EXCEPTS in the object pointed to by FLAGP.  */

extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) __THROW;

/* Raise the supported exceptions represented by EXCEPTS.  */

extern int feraiseexcept (int __excepts) __THROW;

/* Set complete status for exceptions indicated by EXCEPTS according to

the representation in the object pointed to by FLAGP.  */

extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) __THROW;

/* Determine which of subset of the exceptions specified by EXCEPTS are

currently set.  */

extern int fetestexcept (int __excepts) __THROW;

/* Rounding control.  */

/* Get current rounding direction.  */

extern int fegetround (void) __THROW;

/* Establish the rounding direction represented by ROUND.  */

extern int fesetround (int __rounding_direction) __THROW;

/* Floating-point environment.  */

/* Store the current floating-point environment in the object pointed

to by ENVP.  */

extern int fegetenv (fenv_t *__envp) __THROW;

/* Save the current environment in the object pointed to by ENVP, clear

exception flags and install a non-stop mode (if available) for all

exceptions.  */

extern int feholdexcept (fenv_t *__envp) __THROW;

/* Establish the floating-point environment represented by the object

pointed to by ENVP.  */

extern int fesetenv (const fenv_t *__envp) __THROW;

/* Save current exceptions in temporary storage, install environment

represented by object pointed to by ENVP and raise exceptions

according to saved exceptions.  */

extern int feupdateenv (const fenv_t *__envp) __THROW;

/* Include optimization.  */

#ifdef __OPTIMIZE__

//# include

#endif

#ifdef __USE_GNU

/* Enable individual exceptions.  Will not enable more exceptions than

EXCEPTS specifies.  Returns the previous enabled exceptions if all

exceptions are successfully set, otherwise returns -1.  */

extern int feenableexcept (int __excepts) __THROW;

/* Disable individual exceptions.  Will not disable more exceptions than

EXCEPTS specifies.  Returns the previous enabled exceptions if all

exceptions are successfully disabled, otherwise returns -1.  */

extern int fedisableexcept (int __excepts) __THROW;

/* Return enabled exceptions.  */

extern int fegetexcept (void) __THROW;

#endif

__END_DECLS

#endif /* fenv.h */

2、/opt/hisi-linux/x86-arm/arm-hisiv500-linux/arm-hisiv500-linux-uclibcgnueabi/include/c++/4.9.4/bits路径下新建fenv.h

/* Copyright (C) 2004-2014 Free Software Foundation, Inc.

This file is part of the GNU C Library.

The GNU C Library is free software; you can redistribute it and/or

modify it under the terms of the GNU Lesser General Public License as

published by the Free Software Foundation; either version 2.1 of the

License, or (at your option) any later version.

The GNU C Library is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public

License along with the GNU C Library; if not, see

.  */

#ifndef _FENV_H

# error "Never use directly; include instead."

#endif

/* Define bits representing exceptions in the FPSR status word.  */

enum

{

FE_INVALID =

#define FE_INVALID    1

FE_INVALID,

FE_DIVBYZERO =

#define FE_DIVBYZERO    2

FE_DIVBYZERO,

FE_OVERFLOW =

#define FE_OVERFLOW    4

FE_OVERFLOW,

FE_UNDERFLOW =

#define FE_UNDERFLOW    8

FE_UNDERFLOW,

FE_INEXACT =

#define FE_INEXACT    16

FE_INEXACT,

};

/* Amount to shift by to convert an exception bit in FPSR to a an

exception bit mask in FPCR.  */

#define FE_EXCEPT_SHIFT    8

/* All supported exceptions.  */

#define FE_ALL_EXCEPT    \

(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)

/* Define bits representing rounding modes in the FPCR Rmode field.  */

#define FE_TONEAREST  0x000000

#define FE_UPWARD     0x400000

#define FE_DOWNWARD   0x800000

#define FE_TOWARDZERO 0xc00000

/* Type representing exception flags. */

typedef unsigned int fexcept_t;

/* Type representing floating-point environment.  */

typedef struct

{

unsigned int __fpcr;

unsigned int __fpsr;

}

fenv_t;

/* If the default argument is used we use this value.  */

#define FE_DFL_ENV    ((const fenv_t *) -1l)

#ifdef __USE_GNU

/* Floating-point environment where none of the exceptions are masked.  */

# define FE_NOMASK_ENV  ((const fenv_t *) -2)

#endif

3、修改/opt/hisi-linux/x86-arm/arm-hisiv500-linux/arm-hisiv500-linux-uclibcgnueabi/include/c++/4.9.4/arm-hisiv500-linux-uclibcgnueabi/bits/c++config.h文件,新增:

#define _GLIBCXX_HAVE_FENV_H 1

说明:上述fenv.h内容均来源于其他编译器源码中

----END----

坚持写博客是一种美德

没有工匠精神的程序员不是一个好厨师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值