gcc在链接时忽略符号名称的大小写

Cet*_*ert 5 linker gcc symbols case-insensitive

我正在使用的软件使用全小写符号名称将NETLIB BLAS/LAPACK嵌入其源代码但现在将应用程序移植到Windows时我发现英特尔MKL和此平台的其他几种BLAS/LAPACK实现使用全大写符号名.有没有办法告诉gnu编译器/链接器在匹配符号名称时忽略大小写?

.
.
.
undefined reference to `_dgeqp3'
.
.
.

$ nm /lib/LAPACK.lib | grep -i " T _dgeqp3"
00000000 T _DGEQP3
Run Code Online (Sandbox Code Playgroud)

F'x*_*F'x 2

您看到的差异是由于 Fortran 调用约定造成的:在 Fortran 中,符号大小写并不重要,因此每个编译器都有一种方法将 Fortran 符号名称转换为汇编程序符号名称:GNU 编译器通常将全部转换为小写,Windows 上的 Intel 则如此为大写。

如果您使用 Fortran 代码,则可以使用-fsymbol-case-upperg77编译器上的选项(新gfortran编译器没有此选项)。否则,C 就没有简单的答案,除了:

  • 使用#define
  • 使用 BLAS 和 LAPACK 的 C 接口。