This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: gfortran 8.2: compiling and linking dylib for excel 2011 VBA under OSX Mojave
- From: J T Nelson <nelsonjt at earthlink dot net>
- To: Iain Sandoe <idsandoe at googlemail dot com>
- Cc: Fortran List <fortran at gcc dot gnu dot org>
- Date: Sat, 9 Mar 2019 22:12:37 -0800
- Subject: Re: gfortran 8.2: compiling and linking dylib for excel 2011 VBA under OSX Mojave
- Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=dk12062016; d=earthlink.net; b=pKtC0C0enXidVBKWea5U4ReHDTaAZwmKA6J4yWfR7z5u/S0UcPYBLLNkWTmOPbizhM2aBks9i5cdYhLbf6XoH3GQD0qLIDoqdWAuN+vF/oQc9wQ+vWDTpf5RzPoF4zzdfoDRpHaf4ox2NVa4xtCEV7xNMUdKkiC7TumQA/8DL+GD7uQWlGA33kha/57JOHY4QIjKoOWa/WyJ2bfkfOZWSKHU1r4RyjVnLpoNhbywZJgW5yrW1BvZfTgNEtEpug/+h60yQxK4AnCL66Cm25+q8/OMDR2Ikah6AuaEMNg76S09aPbr5/wkknVoucRfT8XozUt/JL0h2o/w0A0noESs8w==; h=Received:Content-Type:Mime-Version:Subject:From:In-Reply-To:Date:Cc:Content-Transfer-Encoding:Message-Id:References:To:X-Mailer:X-ELNK-Trace:X-Originating-IP;
- References: <515D50EE-17CF-4752-BD4C-0692F6219B59@sandoe.co.uk> <69EE3C5C-81EF-4E81-B7E7-D4C599C3F3EE@googlemail.com> <E7056206-C13F-46C1-895C-BBA1188F23BD@earthlink.net> <E24AB670-479D-4099-A576-1CC21CDB0F66@googlemail.com>
I inserted error coding into the VBA stub routine and added GrantAccessToMultipleFiles to request access.
The indicated error on the call is 53 - File not found.
I tried stripping “.dylib" and “lib" from the dynamic library name. No luck.
This is starting to look like a bug in EXCEL 2019 VBA rather than an API problem.
> On Mar 9, 2019, at 5:02 AM, Iain Sandoe <idsandoe@googlemail.com> wrote:
>
> Hi Jim,
>
>> On 6 Mar 2019, at 16:03, J T Nelson <nelsonjt@earthlink.net> wrote:
>
>> I upgraded to EXCEL 2019 and I am not able to call 64-bit dylibs created with fortran 8.2.
>
> Is there any guidance from Microsoft on how to make such a plugin? (even if it assumes use of C, that would help isolate issues).
>
> (I take it this is an officially supported action? ..)
>
>> Evidently, EXCEL is “sandboxed”, but I am not sure if that is the problem.
>
> If you’re trying to use DYLD_LIBRARY_PATH or its friends to insert the library before some MS-provided one, then SIP will defeat you - but probably some rpath solution can be found.
>
> When, in past editions, you had a working solution, where did you place the plugin library?
>
> Have you tried placing the new one in ~/lib ?
>
> What’s the install path you use for the plugin lib?
>
> It is possible to self-codesign exes/dylibs *but* there are some paths on the system for which the signing must use an apple certificate. However, I don’t see why codesigning would be needed for a maths-style library - which doesn’t need any special ports or elevated privs. to operate.
>
> Is the excel install drag & drop?
>
> (if so, placing it somewhere other than /Applications could give you a different set of sandboxing [e.g. I usually have a /DnDApps folder for drag and drop installs, that are not part of the base system])
>
> —
>
> general macOS security issues are not really a GCC/gfortran problem - however, in case we have a build problem - let’s pursue it a little further.
>
> Iain
>
>
>> Jim
>>
>>
>>> On Feb 21, 2019, at 9:44 AM, Iain Sandoe <idsandoe@googlemail.com> wrote:
>>>
>>> … for some reason your ISP is blocking mine :-(
>>>
>>> … hopefully they accept google!
>>>
>>>> Begin forwarded message:
>>>>
>>>> From: Iain Sandoe <iain@sandoe.co.uk <mailto:iain@sandoe.co.uk>>
>>>> Subject: Re: gfortran 8.2: compiling and linking dylib for excel 2011 VBA under OSX Mojave
>>>> Date: 21 February 2019 at 07:42:48 GMT-10
>>>> To: J T Nelson <nelsonjt@earthlink.net <mailto:nelsonjt@earthlink.net>>
>>>> Cc: Fortran List <fortran@gcc.gnu.org <mailto:fortran@gcc.gnu.org>>
>>>>
>>>> Hi,
>>>>
>>>>> On 20 Feb 2019, at 20:07, J T Nelson <nelsonjt@earthlink.net <mailto:nelsonjt@earthlink.net>> wrote:
>>>>> \I have been using versions of gfortran 4 to produce relatively simple vba-callable libs for EXCEL 2011.
>>>>
>>>> neat.
>>>>
>>>>> I employed the -march=i386 and -m32 switches during compilation and linking.
>>>>
>>>> Will the VBA module work without these switches?
>>>> (i.e. does it support 64bit callable libs?)
>>>>
>>>> - that would be your simplest solution since...
>>>>
>>>>> All was well until upgrading to Apple OSX Mohave and downloading Xcode with the latest command line tools.
>>>>> Then, I received warnings that the i386 switch was deprecated.
>>>>> Still the libraries worked without a problem.
>>>>
>>>>
>>>> … From Mojave (10.14) onwards the use of 32b is not certain to work (that’s a somewhat imprecise statement, I realise) …
>>>> .. imprecise because, some (maybe most) 32bit APIs still exist in 10.14 - and thus older 32b stuff will “work” (with a system pop-up warning that they are not optimised .. or similar)
>>>>
>>>> However, fudging 32bit is not a long-term solution, and it could be that one day (even the next release for all I know) it will be removed completely.
>>>>>
>>>>> However, I subsequently installed gfortran 8.2.
>>>>> The -march=386 and -m32 switches produced errors during linking, though the compiler produced objects.
>>>>> The error messages indicate that the objects were compiled for i386 architecture and are ignored.
>>>>>
>>>>> i attempted compiling and linking with or without the -mx32 switch during linking and/or compiling, and the linker produces a library.
>>>>
>>>> As commented by Janne mx32 has no meaning on macOS / Darwin / OSX.
>>>>
>>>>> I have tried -march=native as well as -march=haswell.
>>>>> However, the library returns bad data.
>>>>> I use the same calling conventions in the VBA code for EXCEL 2011, and I believe the VBA finds the library.
>>>>
>>>> The latest Xcode imposes the deprecation of 32bit stuff, the errors you mention are intentional from XCode ..
>>>>
>>>> I would say your only reasonable solution if you have to do 32b is to go to developer.apple.com <http://developer.apple.com/> and login and download an earlier (working) xcode command line tool set. Xcode usually lets you select which command line tools you use from a pop up menu in the prefs.
>>>>
>>>> If that fails, then you are going to need to be a bit more creative, and install the command line tools by hand (somewhere) - plus use xcode-select to activate them.
>>>>
>>>> (there are man pages and online resources for xcode-select).
>>>>
>>>>>
>>>>> Running "nm libFILTER.dylib” indicates that the subroutines in the dylib are labeled as before with gfortran 4, specifically with underscores before and after the subroutine name.
>>>>>
>>>>> I can substitute an older version of the dylib, compiled with gfortran 4.2, and VBA calls work.
>>>>>
>>>>> I regard this behavior as a bug, either in gfortran 8.2, or in the Darwin linker.
>>>>> They obviously don’t work together.
>>>>> This is obviously an X86-64 problem.
>>>>
>>>> It’s neither a bug nor an x86-64 problem - it’s a conscious decision on the part of the system vendor to deprecate and remove 32b support from macOS - you could file a radar, but I don’t hold out a lot of hope for policy change.
>>>>
>>>> I’m out of the office right now so probably only see email sporadically, Dominique might be able to help you in the meantime,
>>>>
>>>> Iain
>>>>
>>>>>
>>>>> Any help would be appreciated.
>>>>> I have searched various blogs, and will likely participate in a blog if you recommend one.
>>>>>
>>>>> I am running OSX Mojave on a Mac Book Air, Model A1466
>>>>> Below is the makefile used to produce the library libFILTER.dylib:
>>>>>
>>>>> I am not a professional programmer, but have been programming seismic codes in F77 for 40 years, and lately F95.
>>>>>
>>>>> Thanks in advance.
>>>>>
>>>>> JTNelson nelsonjt@earthlink.net <mailto:nelsonjt@earthlink.net>
>>>>>
>>>>> Incidentally, except for this problem, I find gfortran to be particularly good and useful !!!
>>>>> I use the intel IFORT compiler at work on a HP workstation with XEON processors.
>>>>> The DLLs produced with IFORT work just fine.
>>>>>
>>>>> #FILTER dynamic library for OSX EXCEL VBA
>>>>> #Makefile for gnumake
>>>>> #gnuform compiler
>>>>> #
>>>>> OBJS = \
>>>>> dbnpass.o \
>>>>> dhipass.o \
>>>>> DEVLMEM.o \
>>>>> MEMCOFD.o \
>>>>> dlopass.o
>>>>>
>>>>> SRCS = $(OBJS:.o=.f) $(OBJS:.o=.F90) $(OBJS:.o=.FOR) $(OBJS:.o=.F) $(OBJS:.o.f90)
>>>>>
>>>>>
>>>>> DEBUG = -c -Wall -mx32 -march=haswell -mtune=haswell -fd-lines-as-comments
>>>>>
>>>>>
>>>>> DEBUGF90 = -c -Wall -mx32 -march=haswell -mtune=haswell
>>>>>
>>>>>
>>>>> .SUFFIXES: .lib .o .obj .f .for .f90 .FOR .F90 .c .prj
>>>>>
>>>>> libFILTER.dylib: $(OBJS) makefile
>>>>>
>>>>> gfortran -mx32 -static -static-libgfortran -dynamiclib -gfull -o $@ $(OBJS)
>>>>>
>>>>> .f.o:
>>>>> gfortran $(DEBUG) $(<)
>>>>>
>>>>> .F.o:
>>>>> gfortran $(DEBUG) $(<)
>>>>>
>>>>> .FOR.o:
>>>>> gfortran $(DEBUG) $(<)
>>>>>
>>>>> .F90.o:
>>>>> gfortran $(DEBUGF90) $(<)
>>>>>
>>>>> .f90.o:
>>>>> gfortran $(DEBUGF90) $(<)
>>>>>
>>>>> print:
>>>>> print $(SRCS)
>>>>>
>>>>> install:
>>>>> mv ./libFILTER.dylib /Users/JTN/lib/libFILTER.dylib
>>>>>
>>>>> clean:
>>>>> rm ./*.o
>>>>>
>>>>
>>>
>>
>