Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混合C++;和Fortran连接问题 我在网上搜索过一些,但是我无法找到如何从Linux编译简单的C++和FORTRAN代码。我需要把它复杂化,但我只需要知道如何从一个简单的例子开始 我使用 iFort < /Cord >编译我的fortran代码和g++用于C++代码。我已尝试此终端命令: $ ifort -c Program.f90 $ g++ -o Main.cpp Program.o_C++_Linker_Fortran_Intel Fortran_Fortran Iso C Binding - Fatal编程技术网

混合C++;和Fortran连接问题 我在网上搜索过一些,但是我无法找到如何从Linux编译简单的C++和FORTRAN代码。我需要把它复杂化,但我只需要知道如何从一个简单的例子开始 我使用 iFort < /Cord >编译我的fortran代码和g++用于C++代码。我已尝试此终端命令: $ ifort -c Program.f90 $ g++ -o Main.cpp Program.o

混合C++;和Fortran连接问题 我在网上搜索过一些,但是我无法找到如何从Linux编译简单的C++和FORTRAN代码。我需要把它复杂化,但我只需要知道如何从一个简单的例子开始 我使用 iFort < /Cord >编译我的fortran代码和g++用于C++代码。我已尝试此终端命令: $ ifort -c Program.f90 $ g++ -o Main.cpp Program.o,c++,linker,fortran,intel-fortran,fortran-iso-c-binding,C++,Linker,Fortran,Intel Fortran,Fortran Iso C Binding,但我得到的错误是“链接器输入文件未使用,因为链接未完成。” 我不知道如何将两者联系起来。如果有人能帮我,我将不胜感激 PS-我曾尝试在编译行的末尾添加-lg2c,但它没有被识别。这里很少有对象名称不匹配的问题。首先,在C++代码中指定外部函数具有C签名: 在test.cpp中: extern "C" int Add( int *, int * ); extern "C" int Multiply( int *, int * ); 有关更多详细信息,请参阅 在Fortran代码中,通过在模块中放

但我得到的错误是“链接器输入文件未使用,因为链接未完成。” 我不知道如何将两者联系起来。如果有人能帮我,我将不胜感激


PS-我曾尝试在编译行的末尾添加
-lg2c
,但它没有被识别。

这里很少有对象名称不匹配的问题。首先,在C++代码中指定外部函数具有C签名:

在test.cpp中:

extern "C" int Add( int *, int * );
extern "C" int Multiply( int *, int * );
有关更多详细信息,请参阅

在Fortran代码中,通过在模块中放置过程使接口显式,并使用
iso_c_binding
使Fortran对象显示为有效的c对象。请注意,我们可以通过C代码或C++程序通过“代码< B/<代码>关键字: 测试f.f90:

module mymod
use iso_c_binding
implicit none

contains

integer(kind=c_int) function Add(a,b) bind(c,name='Add')
    integer(kind=c_int) :: a,b
    Add = a+b
end function

integer(kind=c_int) function Multiply(a,b) bind(c,name='Multiply')
    integer(kind=c_int) :: a,b
    Multiply = a*b
end function

endmodule mymod
编译(不介意我使用英特尔套件,我的g++&gfortran非常旧):

链接:


执行
a.out
现在应该可以按预期工作。

g++
似乎是错误的,应该是'g++-o Program.o Main。cpp@ZacWrangler它不应该,因为C++程序.O会覆盖以前构建的FORTRAN程序。相反,要有不同的对象文件名。请注意,
use iso_c_binding
语句对于显示的代码是多余的-没有从该模块访问任何实体。@IanH-Ah我没有意识到这一点。我编辑代码以删除冗余:)。这比处理那些疯狂的无下划线编译器标志要好得多!
$ ifort -c test_f.f90 
$ icpc -c test.cpp 
$ icpc test_f.o test.o