相关疑难解决方法(0)

混合C++和Fortran链接问题

我在网上做了一些搜索,但我找不到如何从linux编译一个简单的C++和Fortran代码.我需要让它变得复杂,但我只需要知道如何从一个简单的例子开始.

我的C++代码是这样的:

#include <iostream>
using namespace std;

extern int Add( int *, int * );
extern int Multiply( int *, int * );

int main()
{
    int a,b,c;  
    cout << "Enter 2 values: ";
    cin >> a >> b;

    c = Add(&a,&b);
    cout << a << " + " << b << " = " << c << endl;
    c = Multiply(&a,&b);
    cout << a << " * " << b << " = " << c << endl;
    return …
Run Code Online (Sandbox Code Playgroud)

c++ linker fortran fortran-iso-c-binding intel-fortran

5
推荐指数
1
解决办法
1049
查看次数

Fortran和C++的混合编程:Fortran不能调用C++子程序

最近,我正在做一个项目,其中一些 C++ 子例程被 Fortran 脚本调用(Fortran 求解器打算具有一些数据后处理功能,该功能来自用 C++ 开发的库)。以下过程重播错误产生过程。在这里,我使用非常简单的 Fortran 和 C++ 脚本进行简单明了的演示。

一个简单的 Fortran 主程序调用 CXX 子程序: CXX 子程序 - sub1.cxx:

    #include <stdio.h>
    using namespace :: std;
    extern "C" void func_c_();
    void func_c_()
    {
         printf("%d\n", 100);
    }
Run Code Online (Sandbox Code Playgroud)

Fortran 主程序 - sub2.f90:

    program func_fortran
          implicit none
          call func_c()
    end program func_fortran
Run Code Online (Sandbox Code Playgroud)

编译它们:

    g++ -c sub1.cxx
    gfortran -o test sub2.f90 sub1.o
Run Code Online (Sandbox Code Playgroud)

我们得到可执行文件 - 测试。到目前为止,没有问题。

然后我们将 sub1.cxx 替换为 sub1.1.cxx。看起来像:

    #include <iostream>
    using namespace :: std; 
    extern "C" void func_c_();
    void func_c_()
    {
         cout …
Run Code Online (Sandbox Code Playgroud)

c++ fortran

4
推荐指数
1
解决办法
148
查看次数

从Fortran调用C++(链接问题?)

我真的需要你的帮助!我正处于截止日期,我正在努力学习,以完成一些工作.现在已经有一周多了,我正在处理看似简单的问题,但我无法在线成功实施解决方案.

长话短说:我需要从F77调用C++代码.我正在用g ++和gfortran编译.我是一个完整的新手来制作文件.当这些代码被编译为各自程序的一部分时,它们没有错误(我从我的C++代码中获取函数,而不是main(),并尝试将其与fortran代码一起使用).这是我得到的:

C++代码:

#include <cmath>
#include <vector>
using namespace std;

extern"C" double ShtObFun(double x[], int &tp)
{
    return //double precision awesomeness
}
Run Code Online (Sandbox Code Playgroud)

Fortran代码:

    subroutine objfun(nv, var, f, impass)
    implicit real(8) (a-h,o-z), integer (i-n)
c   initializations including tp, used below

    f = ShtObFun(var, tp)

    return
    end
Run Code Online (Sandbox Code Playgroud)

Makefile(仅显示上面列出的文件):

all:
    g++ -c Objective_Functions.cpp
    gfortran -c -O3 opcase1.f
    gfortran opcase1.o Objective_Functions.o -fbounds-check -lstdc++ -g -o Program.out
    rm *.o
Run Code Online (Sandbox Code Playgroud)

错误:

opcase1.o: In function 'objfun_':
opcase1.f:(.text+0xbd): undefined reference to 'shtobfun_'
collect2: ld returned 1 exit …
Run Code Online (Sandbox Code Playgroud)

c++ linker fortran makefile

3
推荐指数
1
解决办法
4664
查看次数

与 gfortran 链接时未定义对 `std::chrono::_V2::system_clock::now()' 的引用

我正在尝试在 INSEL 中创建一个用户定义的块,它需要 C++ 进行编程,并使用 gfortran 链接它。

我的程序中有以下代码

// Setting seed for random number generators
unsigned seed = static_cast<int> (std::chrono::system_clock::now().time_since_epoch().count());
Run Code Online (Sandbox Code Playgroud)

设置为我的随机数生成器的种子。当我使用 g++ (gcc v.5.1.0) 编译它时,它没有显示错误或警告。我的编译命令是

g++ -O0 -Wall -c -g3 -std=c++14 -fmessage-length=0 $(sourcesC)
Run Code Online (Sandbox Code Playgroud)

sourcecC 有我所有的 .cpp 程序。但是当我尝试使用 gfortran 将其链接到:

gfortran -shared -o C:\***\inselUB.dll -Wall -L./ -linselTools $(objects) 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

C:***\resources/../src/constants.h:54: 对 `std::chrono::_V2::system_clock::now()' 的未定义引用

collect2.exe:错误:ld 返回 1 退出状态 makefile:11:目标“inselUB”的配方失败

make: *** [inselUB] 错误 1

我只是这种类型接口的初学者。可能是一个简单的错误。有人能给我建议一个解决方案吗?

操作系统:Win 7

c++ linker fortran gfortran c++14

1
推荐指数
1
解决办法
9352
查看次数