c++ - 如何从主应用程序解析库的编译器特定运行时初始化函数

标签 c++ fortran cmake gfortran

在库语言需要运行时初始化的混合语言库中,最佳实践是什么?

我有一个问题,我想在 Fortran 中创建一个要从 C++ 使用的特定库。如果可能,我希望保留平台独立性编译器独立性。现在,我使用过的两个编译器 G95 和 GFortran 都要求主应用程序调用某些特定于编译器的初始化例程,以便在使用库之前正确设置运行时。这些函数具有不同的名称和签名,具体取决于编译器(对于 G95,该函数为 void g95_runtime_start(int argc, char *argv[]) )

我正在使用 CMake 来管理项目,库子项目是一个静态库。 我是否必须在主应用程序的 cmake 文件中以某种方式找出库子项目使用哪个 fortran 编译器,然后让 CMake 在主项目中创建一个定义,以便我可以有条件地使用任一 init 例程编译主应用程序?感觉很别扭。有没有更好的办法?

最佳答案

autoconf 中支持名称修改和替代主电源 (AC_FC_MAIN) .我知道在 cmake group 中对此进行了一些讨论。此外,它可能在 FortranCinterface 模块中可用。但是我找不到任何文档。与 cmake 相比,我更喜欢使用 autotools,因为这些类型的问题已经解决并有详细记录。

关于c++ - 如何从主应用程序解析库的编译器特定运行时初始化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228288/

相关文章:

c++ - 获取所有可能的组合数

c# - 通过 USB 连接模拟设备

c++ - 为什么 `true` 和 `false` 都被认为是变量?

pointers - 这种使用字符串指针安全吗?

c++ - OpenCV 在 Debug模式下构建并进行优化?

c++ - 使用CMake和Make编译时OpenCV库错误: cannot find -lopencv_bgsegm

c++ - 如何让 GitLab Windows 共享运行器构建速度更快?

c++ - 将 Fortran 中的 Peng Robinson 方程代码转换为 C++

multithreading - 使用 Open MP 将多个线程分配给 Xeon Phi 上的单个并行执行

cmake - 如何找到通过 FetchContent 下载的包的目录?