- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ok I've read the Mixed language programming section and tried
porting some legacy code with common blocks and C structures.
No luck. So I tried the examples and still had no luck.
Here is the link error from trying the examples. It looks like your basic name mangling.
What compiler option settings should I look at?
Compiling...
testcommon.cpp
Compiling Fortran...
F: est est1.for
Linking...
testcommon.obj : error LNK2001: unresolved external symbol 'double PI' (?PI@@3NA)
Debug/test1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
test1.exe - 2 error(s), 0 warning(s)
Here is the test code.
porting some legacy code with common blocks and C structures.
No luck. So I tried the examples and still had no luck.
Here is the link error from trying the examples. It looks like your basic name mangling.
What compiler option settings should I look at?
Compiling...
testcommon.cpp
Compiling Fortran...
F: est est1.for
Linking...
testcommon.obj : error LNK2001: unresolved external symbol 'double PI' (?PI@@3NA)
Debug/test1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
test1.exe - 2 error(s), 0 warning(s)
Here is the test code.
test1.for
PROGRAM TEST1
IMPLICIT NONE
INTEGER*4 I
INTEGER*4 J
REAL*8 PI
COMMON/ PI /PI
INTERFACE
INTEGER*4 FUNCTION TESTCOMMON(N)
INTEGER*4 N
END FUNCTION TESTCOMMON
END INTERFACE
PI = DATAN(1.0D0)*4.0D0
WRITE(*,*)' PI IN FORTRAN = ',PI
J = 5
I = TESTCOMMON(J)
WRITE(*,*)' I = ',I
END
testcommon.h
#ifndef TESTCOMMON_H
#define TESTCOMMON_H
extern double PI;
#endif
testcommon.cpp
#include // input output streams header file
#include
#include
#include 'testcommon.h'
extern 'C'{ int __stdcall TESTCOMMON(int*);}
int __stdcall TESTCOMMON(int *n){
int result_count = 1;
cout << endl;
cout << ' n = ' << *n << endl;
cout << ' PI = ' << PI << endl;
return(result_count);
}
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You're almost there. Add 'C' to the extern declaration of PI in your C++ code.
Steve
Steve
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page