【发布时间】:2017-11-22 16:44:57
【问题描述】:
我正在尝试交叉编译 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接口时出现此错误。
post on the LAPACK forums 表明这是 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。
谁能解释一下这个问题?
【问题讨论】:
-
我建议使用c-preprocessor 标签,而不是不太相关的标签之一(compiler-errors 或bare-metal)。您知道在您的情况下预处理器采用哪个 if 分支吗?哪些被测试的宏分支被定义或没有被定义?
-
我添加了建议的标签,并回答,不,我不确定,我会看看我是否能解决这个问题。
标签: c compiler-errors fortran c-preprocessor lapacke