【问题标题】:C++ / Fortran inter language ABI issues with older versions of GCC旧版本 GCC 的 C++/Fortran 间语言 ABI 问题
【发布时间】:2011-02-11 09:40:22
【问题描述】:

我们已经设法在 Ubuntu 10.10 上构建和运行我们的代码。该代码使用了用 GCC 4.5 编译的 C++ 和用最新版本的 ifort 编译的 fortran。我们可能需要使用几年前的 GCC 版本支持较旧的嵌入式 linux 平台(仍在等待客户的规范)。不幸的是,他们的软件和硬件已指定用于军事用途,因此无法升级。我的问题是,我们是否可能会面临 ABI 问题,使用旧版本的 GCC 构建我们的应用程序并将其与使用最新版本 ifort 编译的库链接?

【问题讨论】:

    标签: c++ gcc fortran intel-fortran abi


    【解决方案1】:

    您是在尝试从 C++ 调用 Fortran 代码,还是从 Fortran 调用 C++ 代码,或者两者兼而有之?如果您从 C++ 调用 Fortran 代码,我认为您不会有问题,特别是如果您使用相同的 Fortran 编译器。

    如果您尝试从 Fortran 访问 C++ 代码,这将取决于 C++ 代码的性质。如果 Fortran 可访问的函数使用 C 链接,那么您应该没问题,因为 C ABI 是标准化的。如果这些函数使用 C++ 链接,我预计会遇到一些麻烦,因为 C++ ABI 不是标准化的,而且我确信 GCC 多年来对其 ABI 进行了微小(并且可能是重大)更改。

    【讨论】:

    • 我们用这个来双向(c++ 到 fortran 和返回)。我认为我们很有可能必须在 ARM 架构上启动并运行它,这意味着我们可能不得不放弃 ifort 并为纯粹的 gcc arm 工具链移植代码。我们最初确实尝试使用 gfortran 构建代码,但它的预处理器不如 iforts 强大(我们通过在通用语言中定义结构来严重依赖它,然后预处理这些结构以生成这些结构的 c++ 和 fortran 版本以实现互操作性)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多