LINUX.ORG.RU

g++ & g77


0

0

Файл f.for function fanka(a) real a fanka=a*a end function fanka

Компиляция либы g77 -c f.for

Файл main.cpp

#include <stdio.h> extern "C" int funca(int ); int main() { int z; z=funca(3); printf(" tytyt =%d",z); return 0; }

компиляция g++ -с main.cpp g++ main.o f.o -o result , не идёт. подскажите какой параметр для вызова форт. функции нужно использовать в сях

anonymous

Файл f.for
     function fanka(a)
	     real a
	     fanka=a*a
	     end function fanka

Компиляция либы  g77 -c f.for

Файл main.cpp

#include <stdio.h>
extern "C" int funca(int );
int main()
{
int z;
z=funca(3);
printf(" tytyt =%d",z);
return 0;
}

компиляция g++ -с main.cpp 
g++ main.o f.o -o  result , не идёт. подскажите какой параметр для вызова форт. функции нужно использовать в сях 

anonymous
()
Ответ на: комментарий от anonymous

Э-э не, исправил, всё то же : (

anonymous
()

[vitaly@vitaly 4]$ g++   main.cpp
/tmp/ccqBBGNQ.o(.text+0x16): In function `main':
: undefined reference to `fanka_'
collect2: ld returned 1 exit status
[vitaly@vitaly 4]$ g++  -c main.cpp
[vitaly@vitaly 4]$ g++   main.o f.o -o result
[vitaly@vitaly 4]$ ./result
Segmentation fault
[vitaly@vitaly 4]$
...... мдя...  подскажите пожалуйстаааааа

anonymous
()
Ответ на: комментарий от anonymous

Нужно так. ---------------------------------- #include <stdio.h> extern "C" { float fanka_(float *a); } int main() { float a,z; a=3.0; z = fanka_(&a); printf("%lg\n",z); return 0; } ------------------------------- function fanka(a) real a fanka = a*a return end --------------------------- g++ -c main.cpp g77 -c f.for g++ main.o f.o

anonymous
()
Ответ на: комментарий от anonymous

Нужно так. 
----------------------------------
#include <stdio.h>
                                                                                
extern "C" {
 float fanka_(float *a);
}
                                                                                
int main()
{
float a,z;
a=3.0;
z = fanka_(&a);
printf("%lg\n",z);
return 0; 
}
-------------------------------
    function fanka(a)
      real a
      fanka = a*a
      return
      end
---------------------------
g++ -c main.cpp
g77 -c f.for
g++ main.o f.o
                                                                                


anonymous
()
Ответ на: комментарий от anonymous

A simple and foolproof way to write g77-callable C routines--e.g. to interface with an existing library--is to write a file (named, for example, fred.f) of dummy Fortran skeletons comprising just the declaration of the routine(s) and dummy arguments plus END statements. Then run f2c on file fred.f to produce fred.c into which you can edit useful code, confident the calling sequence is correct, at least. (There are some errors otherwise commonly made in generating C interfaces with f2c conventions, such as not using doublereal as the return type of a REAL FUNCTION.)

f2c also can help with calling Fortran from C, using its -P option to generate C prototypes appropriate for calling the Fortran.1 If the Fortran code containing any routines to be called from C is in file joe.f, use the command f2c -P joe.f to generate the file joe.P containing prototype information. #include this in the C which has to call the Fortran routines to make sure you get it right.

See Arrays (DIMENSION), for information on the differences between the way Fortran (including compilers like g77) and C handle arrays.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо огромное ! Всё работает.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.