How to call Fortran moules from C++?

C

Cottonwood

I want to call a GNU-Fortran-library from a GNU-C++ source. Is that
possible at all? If yes, what is to be done to link the program?

I get an error message that says that the module MAIN_ cannot be found.
The library withe the fortran modules is known in the project. If I try
to add more Fortran libraries to the project the Dev-Cpp aborts
completely.

Edit: 16:56

I tried to test again. Because I couldn't save the project, I opened a
new one. Strange to say but now I got error messages at compile time so
that I had to add the "extern void" statements.
Here the program:

#include <windows.h>
#include <conio.h>
extern void qqopen(int,int,char);
extern void qqpoint(int,int);
extern void qqline(int,int);
extern void qqclose();
int main()
{
int ix, iy;

ix=1201; iy=1001;
qqopen(ix,iy,'.\\qqtest.bmp');
ix=10;iy=10;
qqpoint(ix,iy);
ix=1190; iy=990;
qqline(ix,iy);
qqclose();
}

Now I get linkage messages meaning that the library modules couldn'd be
found. From this reason I dont get the message with the missing MAIN_
atthis time. But it will come back I think. Here the toc of the modlib:

qqbord.o
qqcircle.o
qqclose.o
qqfill.o
qqline.o
qqopen.o
qqor.o
qqplot.o
qqpoint.o
qqrandom.o
qqwhite.o

And here the actual messages:

F:\C\Dev-Cpp\bin\main.o In function `main':
[Linker error] undefined reference to
`qqopen(int, int, char)'
[Linker error] undefined reference to
`qqpoint(int, int)'
[Linker error] undefined reference to
`qqline(int, int)'
[Linker error] undefined reference to
`qqclose()'
F:\C\Dev-Cpp\bin\main.o ld returned 1 exit status
F:\C\Dev-Cpp\Makefile.win [Build Error] [QQPlot.exe] Error 1

What am I doing wrong?
 
R

red floyd

Cottonwood said:
I want to call a GNU-Fortran-library from a GNU-C++ source. Is that
possible at all? If yes, what is to be done to link the program?

[redacted]

What am I doing wrong?

What you're doing wrong is asking in the wrong group. I suspect you'd
be able to get a lot better help in the newsgroup gnu.g++.help

What you have is a question about a particular implementation, not about
the lanugage itself, so it's not topical in c.l.c++. However, the
people over gnu.g++.help know all about g++, and should be able to help you.
 
M

Markus Schoder

Cottonwood said:
I want to call a GNU-Fortran-library from a GNU-C++ source. Is that
possible at all? If yes, what is to be done to link the program?

I get an error message that says that the module MAIN_ cannot be found.
The library withe the fortran modules is known in the project. If I try
to add more Fortran libraries to the project the Dev-Cpp aborts
completely.

Edit: 16:56

I tried to test again. Because I couldn't save the project, I opened a
new one. Strange to say but now I got error messages at compile time so
that I had to add the "extern void" statements.
Here the program:

#include <windows.h>
#include <conio.h>
extern void qqopen(int,int,char);
extern void qqpoint(int,int);
extern void qqline(int,int);
extern void qqclose();

Try something like

extern "C" void qqopen(int*,int*,char*);

Fortran certainly does not use C++ name mangling and does not pass
parameters by value.

To successfully link you probably need a Fortran runtime library. Their
should be one as part of the GNU g77 package normally called libg2c.a
or similar.
 
B

bubbleman

Cottonwood said:
I want to call a GNU-Fortran-library from a GNU-C++ source. Is that
possible at all? If yes, what is to be done to link the program?

I get an error message that says that the module MAIN_ cannot be found.
The library withe the fortran modules is known in the project. If I try
to add more Fortran libraries to the project the Dev-Cpp aborts
completely.

Edit: 16:56

I tried to test again. Because I couldn't save the project, I opened a
new one. Strange to say but now I got error messages at compile time so
that I had to add the "extern void" statements.
Here the program:

#include <windows.h>
#include <conio.h>
extern void qqopen(int,int,char);
extern void qqpoint(int,int);
extern void qqline(int,int);
extern void qqclose();
int main()
{
int ix, iy;

ix=1201; iy=1001;
qqopen(ix,iy,'.\\qqtest.bmp');
ix=10;iy=10;
qqpoint(ix,iy);
ix=1190; iy=990;
qqline(ix,iy);
qqclose();
}

Now I get linkage messages meaning that the library modules couldn'd be
found. From this reason I dont get the message with the missing MAIN_
atthis time. But it will come back I think. Here the toc of the modlib:

qqbord.o
qqcircle.o
qqclose.o
qqfill.o
qqline.o
qqopen.o
qqor.o
qqplot.o
qqpoint.o
qqrandom.o
qqwhite.o

And here the actual messages:

F:\C\Dev-Cpp\bin\main.o In function `main':
[Linker error] undefined reference to
`qqopen(int, int, char)'
[Linker error] undefined reference to
`qqpoint(int, int)'
[Linker error] undefined reference to
`qqline(int, int)'
[Linker error] undefined reference to
`qqclose()'
F:\C\Dev-Cpp\bin\main.o ld returned 1 exit status
F:\C\Dev-Cpp\Makefile.win [Build Error] [QQPlot.exe] Error 1

What am I doing wrong?

Your 'extern' declarations should be "extern "c" void" to avoid the
name mangling that C++ will do, that Fortran does not. This is
probably part of your problem.
 
C

Cottonwood

Thanks. I did. Here is the new source:


#include <windows.h>
#include <conio.h>
extern "C" void qqopen(int*,int*,char*);
extern "C" void qqpoint(int*,int*);
extern "C" void qqline(int*,int*);
extern "C" void qqclose();
int main()
{
int ix, iy;

ix=1201; iy=1001;
qqopen(ix*,iy*,'.\\qqtest.bmp'*);
ix=10;iy=10;
qqpoint(ix*,iy*);
ix=1190; iy=990;
qqline(ix*,iy*);
qqclose();

}


But now I get messages like this:

12 F:\C\Dev-Cpp\bin\main.cpp expected primary-expression before ','
token

And I get this message (as before):

12:16 F:\C\Dev-Cpp\bin\main.cpp [Warning] character constant too long
for its type

May that cause any problems?
 
C

Cottonwood

Your name sounds German. So if I'm right you may answer in German also
- as you wish.
 
C

Cottonwood

Thanks. At the moment I just have a C++ specific question to this
problem. As soon as it is answered I will create a new thread there.
If I have problems any longer.
 
C

Cottonwood

Thanks. At the moment I just have a C++ specific question to this
problem. As soon as it is answered I will create a new thread there.
If I have problems any longer.
 
C

Cottonwood

@red floyd: Sorry, but I'm not able to answer to your answer directly.
I tried, but it was shown at the wrong place. So please excuse that.
Here's my answer:

Thanks. At the moment I just have a C++ specific question to this
problem. As soon as it is answered I will create a new thread there.
If I have problems any longer.
 
P

Phlip

What you're doing wrong is asking in the wrong group. I suspect you'd be
able to get a lot better help in the newsgroup gnu.g++.help

This is an example of the advice "if you can't help, don't bounce". The
answer might very probably be the extern "C", which is an example of an
on-topic answer to a questionable question.

The f2c compiler might also help.
 
R

Richard Herring

Thanks. I did. Here is the new source:


#include <windows.h>
#include <conio.h>
extern "C" void qqopen(int*,int*,char*);
extern "C" void qqpoint(int*,int*);
extern "C" void qqline(int*,int*);
extern "C" void qqclose();
int main()
{
int ix, iy;

ix=1201; iy=1001;
qqopen(ix*,iy*,'.\\qqtest.bmp'*);

What's that supposed to mean? ITYM qqopen(&ix, &iy, ".\\qqtest.bmp");
ix=10;iy=10;
qqpoint(ix*,iy*);
ix=1190; iy=990;
qqline(ix*,iy*);
qqclose();

}


But now I get messages like this:

12 F:\C\Dev-Cpp\bin\main.cpp expected primary-expression before ','
token

Not surprising. " qqopen(ix*,iy*,'.\\qqtest.bmp'*) ; " isn't valid C++
syntax.
And I get this message (as before):

12:16 F:\C\Dev-Cpp\bin\main.cpp [Warning] character constant too long
for its type

In C++, string constants are enclosed in double-quotes.
May that cause any problems?
Just a few ;-)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,077
Latest member
SangMoor21

Latest Threads

Top