EIGEN_USE_BLAS 在 Mac 上导致类型冲突错误

EIGEN_USE_BLAS causes conflicting types errors on Mac

提问人:PluginPenguin 提问时间:10/23/2023 最后编辑:PluginPenguin 更新时间:10/23/2023 访问量:48

问:

我想尝试使用 Eigen 3.4.90 为 macOS 应用程序启用 blas 支持,看看它是否能为我的用例带来任何加速。我的应用程序已经链接到 Apple Accelerate 框架,并在各个位置包含加速标头。

定义时,我收到很多冲突的类型错误,如下所示:EIGEN_USE_BLAS=1

Path/To/Eigen/src/Core/util/../../misc/blas.h:10:5: error: conflicting types for 'saxpy_'
int BLASFUNC(saxpy)(const int *, const float  *, const float  *, const int *, float  *, const int *);
    ^
Path/To/Eigen/src/Core/util/../../misc/blas.h:6:24: note: expanded from macro 'BLASFUNC'
#define BLASFUNC(FUNC) FUNC##_
                       ^
<scratch space>:391:1: note: expanded from here
saxpy_
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk/System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/fortran_blas.h:45:5: note: previous declaration is here
int saxpy_(int *n, float *da,

我看到的是,Eigen 本身使用常量指针签名声明 BLAS 函数,而 Accelerate 框架中的 Apple 标头使用非常量指针签名声明相同的函数。所以错误消息的原因很清楚,我仍然想知道如何处理?Eigen期望如何运作?正如我所说,Accelerate 标头包含在我的项目中,因为我需要从中访问函数。有没有办法避免包含非常量 Apple BLAS 函数声明,或者有什么方法可以让 Eigen 使用 Apple 声明而不是定义自己的声明?到目前为止,我还没有在 Eigen 文档中找到任何关于这方面的内容,我很高兴有任何答案将我指向我可能错过的关于这个问题的官方文档。fortran_blas.h

C++ 特征加速 框架

评论

1赞 463035818_is_not_an_ai 10/23/2023
是还是?cc++
0赞 PluginPenguin 10/23/2023
嗯,它是在C++应用程序的上下文中,Eigen显然是一个C++库,但BLAS是一个C库,所以C++代码调用C函数。你指的是我选择的标签吗?
0赞 Homer512 10/23/2023
BLAS 是一个 Fortran 库。Eigen 不使用 cblas,也不使用任何 BLAS 提供的标头。所以,是的,这里的 C 标签是错误的。有些人对此非常挑剔。
0赞 Homer512 10/23/2023
如果您确信 accelerate 的标头是二进制兼容的,则可以在包含它之后,再包含任何 Eigen 标头。执行此操作的小型头文件可能会解决该问题。#define BLAS_H
2赞 Homer512 10/23/2023
对应票证:gitlab.com/libeigen/eigen/-/issues/2420

答: 暂无答案