Calling C++ from Fortran (linking issue?)
I really need your help! I'm on a deadline and I'm trying to learn just
enough to get some work done. It's been well over a week now that I'm
dealing with what appears to be a straightforward issue but I haven't been
able to successfully implement solutions online.
Long story short: I need to call C++ code from F77. I'm compiling with g++
and gfortran. I'm a complete newb to makefiles. When these codes are
compiled as part of their respective programs, they are bug free (I'm
taking a function from my C++ code, not main(), and trying to use it with
the fortran code). Here's what I've got:
C++ Code:
#include <cmath>
#include <vector>
using namespace std;
extern"C" double ShtObFun(double x[], int &tp)
{
return //double precision awesomeness
}
Fortran Code:
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
Makefile (shows only files listed above):
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
Error:
opcase1.o: In function 'objfun_':
opcase1.f:(.text+0xbd): undefined reference to 'shtobfun_'
collect2: ld returned 1 exit status
I have tried this a variety of other ways and they did not work. I can
list those later if requested. Does anyone see the issue here?
The sites I've checked:
calling C++ function from fortran not C, Linking fortran and c++ binaries
using gcc, , Calling C Code from FORTRAN, Cookbook - Calling C from
Fortran, YoLinux - Using C/C++ and Fortran together
No comments:
Post a Comment