Liste des Groupes | Revenir à cl fortran |
Lynn McGuire <lynnmcguire5@gmail.com> schrieb:I cannot get a small code sample with or without a DLL to exhibit the problem. Like I said, I thought it was something related to size of my DLL. And this is the small DLL, only 3 MB.I just ran into a nasty problem with GFortran and G++ (C++). ProbablyWithout having looked at the source code, I suspect
not a bug ??? I am using GCC 14.1.
>
I have a lot of code in C++ (over 100,000 lines). I have 750,000 lines
of code in GFortran. I have to extern "C" this code in C++ to make it
callable by GFortran code.
>
I missed declaring a couple of C++ functions as extern "C" which means
that they kept their C++ mangled link names. But these C++ functions
were declared as integer*8 and external in the GFortran code (old F77
code).
>
So, the GCC linker did not report to me that it did not have a link for
the G++ functions. This may be a bug, I am not sure.
it is probably something that you are not describing.
You can look into the object files with any number of utilities,
for example "nm". Here's an example:
subroutine foo
external bar
integer *8 bar
print *,bar(1234)
end subroutine foo
Compiling to an object file and running nm on this will show you
U bar_
0000000000000000 T foo_
U _gfortran_st_write
U _gfortran_st_write_done
U _gfortran_transfer_integer_write
which means you have a symbol "foo_" defined, it is a global (hence
uppercase) symbol in the text section (hence T). You also have
several undefined symbols, among them bar_, plus some gfortran
library routines, so all is fine.
If you do not find your undefinedWhen I ran the program, the C++ functions were not called by the
GFortran code. Instead, the GFortran code treated the C++ functions as
integer*8 scalar variables.>That I would consider highly unlikely.
If needful, I can probably put together a small code sample that
exhibits the problem. Maybe. It could be that the size of my code
affects the GCC linker.
Les messages affichés proviennent d'usenet.