a minimum code to show the problem : toto.F : subroutine toto() implicit none real*8 variable common /demof/variable print*,'Fortran variable=',variable end toto.cc: #include <iostream> struct {double variable;}demof; extern "C" void toto(); int main() { demof.variable=3.14159; std::cout<<"C++ variable = "<<demof.variable<<std::endl; toto(); return 0; } * Gcc 4.1 give me : C++ variable = 3.14159 Fortran variable= 3.14159000000000 * Gcc 4.6 give me: C++ variable = 3.14159 Fortran variable= 0.00000000000000 Yours differents solutions work, but I would prefer to use an option to have the old behavior. Because, I have 163 files with anonymous strut to modify. And, each file require special attention because struct are linked, or not, with a COMMON, and COMMON are not necessary include in source, etc. So, if it isn't possible to use an option, I will have a lot of work now. Else I could modify progressively. -----Message d'origine----- De : Jonathan Wakely [mailto:jwakely.gcc@xxxxxxxxx] Envoyé : jeudi 22 novembre 2012 22:07 À : LAMOME Julien CS-SI Cc : gcc-help@xxxxxxxxxxx Objet : Re: [C++] anonymous struct linkage On 22 November 2012 21:03, Jonathan Wakely wrote: > On 22 November 2012 15:44, LAMOME Julien CS-SI > <julien.lamome-cs-si@xxxxxxx> wrote: >> Hi, >> we have a code mixing C++ and Fortran 77. In fortran, we have some COMMON like : >> COMMON / DEMOF/VARIABLE >> Which are include in fortran source file like this : >> #include <demof.include> >> >> We link with C++ code like this : >> struct { double variable}demof ; >> >> The problem is : >> Between gcc 4.3 and gcc 4.6, the linkage of demof (in C++) change from global to local. This breaks the link between C++ and fortran. >> >> How can I restore the global linkage in gcc 4.6 ? > > Give the type a name: > > struct D { double variable; } demof; > > Problem solved. Alternatively, give it C language linkage: extern "C" { struct { double d; } demof; }