gpt4 book ai didi

c++ - 与编译器无关的 Fortran 名称修改功能

转载 作者:太空狗 更新时间:2023-10-29 20:46:47 26 4
gpt4 key购买 nike

我正在动态链接到一个 Fortran 静态对象,并且需要能够(在运行时)获取 Fortran 函数的名称(这是一个 C++ 字符串)并为编译器适本地命名。是否有任何预建功能可以达到此目的?在静态链接的情况下,我使用的是 autoconf 的 FC_FUNC。

为了清楚起见,我想要一个能够接受字符串的函数,将其解释为 Fortran 子例程名称并针对给定的编译器对其进行适当的处​​理。在伪 C++ 中:

std::string subroutine = "FORTRANSUBROUTINE";
std::string symbol = FortranMangle(subroutine);

std::cout << symbol << endl; // Would output something like "fortransubroutine_"

我自己并不知道所有用于编写这个神秘的“FortranMangle”函数的名称修改方案。

最佳答案

我假设您想在运行时使用 dlopen 从 C 访问 fortran 例程。由于符号根据 Fortran 编译器而变化,因此您不知道要将什么传递给 dlsym 才能获取符号。

一个可能的解决方案是使用 BIND(C) 指定要调用的 Fortran 例程.这消除了名称重整并使用 C 风格的符号名称,即一对一映射。

另一种方法是您知道如何进行重组,并相应地实现 FortranMangle 例程。没有任何预制的东西,因为 mangling 是特定于编译器的,规范中没有关于此的任何内容。

关于c++ - 与编译器无关的 Fortran 名称修改功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7175405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com