- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Our code runs in 2 different IA32 forms plus EM64T form, which means I have to deliver a minimum of 3 sets of MOD/LIB files. I'm trying to avoid delivering version-specific files tha span v9 thru v12 - that would be 12 sets of files - unwield for my limited resources.
NOTE - I do not seem to have this problem in the em64t version, though I do seems to have some kind of symbol naming problem when I try to build the em64t MOD/LIB files with v9.1 IFORT (I'd like to know what to do about this too, if possible - just in case I have to build version-specific MOD and LIB for every situation).
THANKS in advance for any advice or ideas
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have noticed occasional .MOD file incompatibilities between Ifort 11.1 and 12.0. A solution in this case, one which is used, for example in the IMSL library, is to provide the source code for a module containing just the interface blocks to the routines in the library.
Does your library export module procedures or only external procedures?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am a bit puzzled by your description of the problem, though, as I am aware of a decoration issue only on the Intel 64 platform. Can you provide a short example that shows the problem? I may be able to offer some tips.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm sure I'm not cross 32 and 64 bit versions. The modules in question came from refactoring old code that used static allocation and common blocks, replacing it with modules and dynamically allocated "c pointer" arrays. The modules in question do nothing more than declare the things that were once in common blocks - one module per replaced common block. These modules CONTAIN no functions or subroutines. The link error I'm having happens when I try to access a variable or array declared in one of these modules.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am a bit puzzled by your description of the problem, though, as I am aware of a decoration issue only on the Intel 64 platform. Can you provide a short example that shows the problem? I may be able to offer some tips.
I was aware of the 64bit decoration issue too. I might yet crash my face into that one too, though if I set up with version-specific deliverables, I should be OK - it's just a lot lot more complex to collate all the parts from the other contributors - suddenly having to ask them for 4 builds instead of just 1, or taking over the builds myself and incorporating it into my tooling and scripts.
It seems that in v10.1 and earlier IFORT did not decorate some symbol names coming from a module. My modules are pretty much declaration-only, no procedures. For example, I can see FIXCON_mp_CCONSTANTS as a symbol when compiled with v10, but compiling with v11 I see _FIXCON_mp_CCONSTANTS instead.
It seems v10 names these symbols in the 64bit fashion, inconsistently decorated relative to all the other ia32 named symbols, and that y'all fixed it in v11 - consistent symbol decorations regardless of where the symbol comes from.
Is there a way to override ro control this decoration in F90 that will work across the v9 thru v12 range?
Below is an email I wrote to a coworker, and the referenced files are attached.
It sounds like I should plan on version-specific deliverable, eh?
Dan
======================
Please see attached mini project
MAIN = main program
FIXCON = results in both MOD and OBJ files
OBJECT = subroutine that is called by MAIN and uses FIXCON
Note the txt files I think the names explain what is in each the dumpbin /symbols for FIXCON and OBJECT
At a glance, I see no name mangling in the 64bit stuff. However, I do see a reference to a symbol named __ImageBase (double underscore). This is present in FIXCON.OBJ from IFORT11 but not present in IFORT10.
For the 32bit version, I see name mangling. IFORT10 fails to put the underscore in front of the FIXCON symbol and IFORT11 does put it there. I cant seem to find any compiler or code generation options that manipulate this underscore prefix. Underscore suffixes that I can find, but not prefixes.
Please look over the TXT files with your more trained and in tune eye and let me know what you think.
Im still hoping to find some kind of code generation option that will make it work.
In general, I hope to find
As it stands right now, to get it working with IFORT11, I have to do 2 things
1. 64bit: Re-do the MOD files with IFORT11
2. 32bit: Re-do both MOD files and LIB file with IFORT11
Doing this results in a IFORT11-only build with no backward compatibility.
Its looking more and more like Im going to have to build compiler-version specific MOD and TLIB files. Thats going to impact the installer a lot more than wed like, Im afraid.
Dan
=====================- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I do not know if a similar problem exists with respect to module procedures, since the example does not contain any. This needs to be checked.
Because of the symbols being present in the .OBJ, .LIB and .DLL files, making the source of the constants module available, as I thought earlier might be sufficient, is not a solution.
I have verified that modules and objects produced by 11.1/IA32 and 12.0/IA32 are forward and backward compatible. Therefore, one solution would be to exclude the use of compilers earlier than 11.1 (possibly 11.0, I have not got that version).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes, that is the problem -
Eliminating v9 might be an option, but I can't eliminate v10. I might come up with a single file set for v9/10 and another for v11/12 though.
I'm hoping (not expecting) Steve will come up with a nugget of wisdom or technique that might help me a bit.
Thanks for yor interest and help!
Dan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I cannot think of a good workaround, unfortunately. If you can eliminate the use of EQUIVALENCE with module variables that would be best, but I recognize that is a major effort.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Whether Dan can do something similar to this with his real project is debatable, unless the equivalence declarations in it are equally dispensable. The facility for renaming USE associated variables may be used in place of equivalence in those source files where different names are desired.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks - I don't think I can dispense with the EQUIVALENCE statements very easily, at least not with my remaining schedule.
I'm trying to keep code alive that's been in use for more than 30 years without ever knuckling down for that proper rewrite that perpetually gets put off. The way this stuff was written was elegant for its time, but you just wouldn't do things that way now days.
Thanks to you both for the help and guidance,
Dan

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page