delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
DomainKey-Signature: | a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:message-id:date:from:mime-version:to:subject | |
:references:in-reply-to:content-type:content-transfer-encoding; | |
q=dns; s=default; b=CkRRV7a3v3rg9ANP+oeTH72xxKR7wz3DSeVc6IQuSN7 | |
FYku7SOvG8UoM/QXimOCpLdnEOemE5x7mqJoysBPmnAU5D4OtZHdo87Axlw8pQ2Y | |
PIff1YSzDGx42rl5f+45c77uWfG7smFOjviZMfq/2IhzM2VBUW9+nfAnDRyoFrDg | |
= | |
DKIM-Signature: | v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:message-id:date:from:mime-version:to:subject | |
:references:in-reply-to:content-type:content-transfer-encoding; | |
s=default; bh=mux0lOG6WrqmHajNspxu6Jx0VM0=; b=VjE6xKuaRb8+lbzSd | |
GZEycy34iXQmK7x+D4500/G9As8BHD78AVkCl6TlbIX3Ai6JKyHi7IZwGW2rtPNH | |
rLJ85zN647uKoBK6yizA71D4THRZ2VjAcyQzXoSxLFzgePodwySWiRlt2d/xU/o6 | |
8H3oqxIaHacocg5RlU0zdG2k6g= | |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.com> |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
Sender: | cygwin-owner AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
Delivered-To: | mailing list cygwin AT cygwin DOT com |
Authentication-Results: | sourceware.org; auth=none |
X-Virus-Found: | No |
X-Spam-SWARE-Status: | No, score=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 |
X-HELO: | smtp105.biz.mail.gq1.yahoo.com |
X-Yahoo-SMTP: | ycweUreswBCK.d0cygTP5tXwHncbOU7YVeVfIxOQoyRMI2IuIKLmUqE- |
Message-ID: | <558B4739.9050303@molconn.com> |
Date: | Wed, 24 Jun 2015 20:11:37 -0400 |
From: | LMH <lmh_users-groups AT molconn DOT com> |
User-Agent: | Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0 SeaMonkey/2.32.1 |
MIME-Version: | 1.0 |
To: | cygwin AT cygwin DOT com, balay AT fastmail DOT fm |
Subject: | Re: using fortran common block from dll created by gfortran |
References: | <alpine DOT LFD DOT 2 DOT 11 DOT 1506232245380 DOT 28689 AT asterix> <alpine DOT LFD DOT 2 DOT 11 DOT 1506241021130 DOT 22435 AT asterix> |
In-Reply-To: | <alpine.LFD.2.11.1506241021130.22435@asterix> |
X-IsSubscribed: | yes |
If you having trouble communicating with the dll, it might make more sense to create a generic c dll and embed the fortran in the c dll as a subroutine. It is generally not a problem to call a fortran subroutine from c code though there are some syntax specifics to follow. Your communication with the dll could follow standard c protocols. Since c code and fortran code will have their own namespaces, your fortran includes, common block, etc, shouldn't be a problem since those variables will only be linked to the fortran objects. Your fortran src files will be run through the fortran pre-processor so your common block should be fine. Your c src files will be run through the c pre-processor. The c objects won't know anything about the fortran global variables but you can exchange what you need to between the c and fortran in the call to the fortran subroutine. You end up with two copies of allot of things but this is a decent way to get fotrran code to talk to the modern programming world. The only way I know to use the same memory namespace for both c and fortran files is to run the fortran through the c pre-processor (name your fortran src files .FPP). This lets you use c style includes and compiler directives in your fortran code but does not support a common block. You would have to declare global variables in c style includes. LMH Satish Balay wrote: > Thanks for the note. > > I had previously tried something similar - using the directives from > http://gcc.gnu.org/onlinedocs/gfortran/GNU-Fortran-Compiler-Directives.html > > However - I get errros. > >>>>>>>>>>> > balay AT ps4 ~/junk > $ cat cb_func.f > subroutine cb_func() > !GCC$ ATTRIBUTES DLLEXPORT :: cb_func, /cb/ > common /cb/ cvar > integer cvar > cvar = 2 > end > > balay AT ps4 ~/junk > $ gfortran -c cb_func.f > cb_func.f:2.40: > > *GCC$ ATTRIBUTES DLLEXPORT :: cb_func, /cb/ > 1 > Error: Invalid character in name at (1) > > balay AT ps4 ~/junk > $ > <<<<<<<<<<<<< > > Wrt 'common blocks' vs 'module' - this usage is part of a c library > supporting fortran interfaces [and works generally on various OSes, > compilers]. We haven't worked with dlls on windows much. However this > issue came up on such an attempt with cgwin/gnu compilers. > > PS: I'm not subscribed to the ML - it would be great if I'm included in cc: > > Thanks, > Satish > >>>>>>>> > Hi, > > while this is not directly related to gfortran on Cygwin, this article > might help you appreciate the issues involved: > https://software.intel.com/en-us/node/535307 > > Are you bound to common blocks? If not, you may get better results > when you put the data in a module. > > Regards, > > Arjen > > On Tue, 23 Jun 2015, Satish Balay wrote: > >> Hi Cygwin, >> >> I'm debuging an issue with dlls with cygwin gnu compilers - and have >> narrowed down the issue to the attached test case [script]. >> >> Could you guide me to correct usage of 'fortran common block' with dlls? >> >> [In this example - using fortran 'common block' via static library >> works. However the same code using a .dll fails] >> >> Thanks, >> Satish >> >> --------- >> >> balay AT ps4 ~/junk >> $ ./cb_test.sh >> + cat >> + cat >> + rm -f '*.o' '*.dll' '*.a' '*.exe' >> + gfortran -c cb_func.f cb_main.f >> + ar cr libcb_static.a cb_func.o >> + gfortran cb_main.o -L. -lcb_static -o cb_main_static >> + gfortran -shared -o libcb_dynamic.dll cb_func.o >> + gfortran cb_main.o -L. -lcb_dynamic -o cb_main_dynamic >> + ./cb_main_static >> GOOD COMMON BLOCK >> + ./cb_main_dynamic >> BAD COMMON BLOCK >> >> >> balay AT ps4 ~/junk >> $ uname -a >> CYGWIN_NT-6.1 ps4 2.0.4(0.287/5/3) 2015-06-09 12:22 x86_64 Cygwin >> >> balay AT ps4 ~/junk >> $ gfortran --version >> GNU Fortran (GCC) 4.9.2 > > > -- > Problem reports: http://cygwin.com/problems.html > FAQ: http://cygwin.com/faq/ > Documentation: http://cygwin.com/docs.html > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > > -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |