我正在尝试交叉编译 LAPACK 库(fortran)和 C API,LAPACKE 用于裸机嵌入式目标 powerpc-eabi 目标,为此目标使用 gcc 交叉编译器。编译继续,但最终遇到此错误:
[ 44%] Building C object LAPACKE/CMakeFiles/lapacke.dir/src/lapacke_cbbcsd.c.obj
cd /home/rcrozier/build/powerpc-eabi/lapack/LAPACKE && /usr/local/powerpc-eabi/bin/powerpc-eabi-gcc -DADD_ -mcpu=750 -I/home/rcrozier/src/fast-v8-hg/cross-dependancies/lapack-3.6.0/LAPACKE/include -o CMakeFiles/lapacke.dir/src/lapacke_cbbcsd.c.obj -c /home/rcrozier/src/fast-v8-hg/cross-dependancies/lapack-3.6.0/LAPACKE/src/lapacke_cbbcsd.c
In file included from /home/rcrozier/src/fast-v8-hg/cross-dependancies/lapack-3.6.0/LAPACKE/include/lapacke_utils.h:37:0,
from /home/rcrozier/src/fast-v8-hg/cross-dependancies/lapack-3.6.0/LAPACKE/src/lapacke_cbbcsd.c:34:
/home/rcrozier/src/fast-v8-hg/cross-dependancies/lapack-3.6.0/LAPACKE/include/lapacke.h:145:22: error: ‘LAPACK_GLOBAL’ declared as function returning a function
#define LAPACK_lsame LAPACK_GLOBAL(lsame,LSAME)
^
在构建 LAPACK、LAPACKE 的 C 接口时会出现此错误。
LAPACK 论坛上的一篇文章表明这是 Fortran 名称修改的问题,并添加了-DADD_
处理器标志。上面我已经尝试过了,但这没有任何区别。
预处理器定义用于头文件,复制如下:
#ifndef LAPACK_HEADER_INCLUDED
#define LAPACK_HEADER_INCLUDED
#ifndef LAPACK_GLOBAL
#if defined(LAPACK_GLOBAL_PATTERN_LC) || defined(ADD_)
#define LAPACK_GLOBAL(lcname,UCNAME) lcname##_
#elif defined(LAPACK_GLOBAL_PATTERN_UC) || defined(UPPER)
#define LAPACK_GLOBAL(lcname,UCNAME) UCNAME
#elif defined(LAPACK_GLOBAL_PATTERN_MC) || defined(NOCHANGE)
#define LAPACK_GLOBAL(lcname,UCNAME) lcname
#else
#define LAPACK_GLOBAL(lcname,UCNAME) lcname##_
#endif
#endif
#endif
错误发生在另一个头文件中,它使用LAPACK_GLOBAL
如下:
#include "lapacke_mangling.h"
#define LAPACK_lsame LAPACK_GLOBAL(lsame,LSAME)
lapack_logical LAPACK_lsame( char* ca, char* cb,
lapack_int lca, lapack_int lcb );
文件内容如下图lapacke_mangling.h
所示:
#ifndef LAPACK_HEADER_INCLUDED
#define LAPACK_HEADER_INCLUDED
#endif
在本机构建或为另一个 linux 目标构建时不会发生该错误,powerpc-linux-gnu
.
谁能解释这个问题?