相关疑难解决方法(0)

在Fortran代码中调用C函数/子例程

我正在尝试编译和链接调用c子例程的Fortran代码:

Fortran代码:

program adder
integer a,b
a=1
b=2
call addnums(a,b)
stop    
end program
Run Code Online (Sandbox Code Playgroud)

C代码:

void addnums( int* a, int* b ) 
{
    int c = (*a) + (*b);  /* convert pointers to values, then add them */
    printf("sum of %i and %i is %i\n", (*a), (*b), c );
}
Run Code Online (Sandbox Code Playgroud)

我在Windows环境中使用以下命令进行编译和链接.

ifort -c adder.f
cl -c addnums.c
ifort -o add adder.obj addnums.obj
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.
-out:add.exe 
-subsystem:console 
adder.obj 
addnums.obj 
adder.obj …
Run Code Online (Sandbox Code Playgroud)

c fortran compilation fortran-iso-c-binding

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

使用Fortran调用C++函数

我正在尝试使用一些FORTRAN代码来调用我编写的几个c ++函数(c_tabs_就是其中之一).链接和一切工作正常,只要我调用不属于类的函数.

我的问题是我希望FORTRAN代码调用的函数属于一个类.我使用nm查看符号表,函数名称就像这样丑陋:

00000000 T _ZN9Interface7c_tabs_Ev
Run Code Online (Sandbox Code Playgroud)

FORTRAN不允许我用这个名字来调用函数,因为开头有下划线,所以我很茫然.

当c_tabs不在类中时,它的符号非常简单,FORTRAN对它没有任何问题:

00000030 T c_tabs_
Run Code Online (Sandbox Code Playgroud)

有什么建议?提前致谢.

c++ fortran

4
推荐指数
2
解决办法
3996
查看次数

从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
查看次数

标签 统计

fortran ×3

c++ ×2

c ×1

compilation ×1

fortran-iso-c-binding ×1

linker ×1

makefile ×1