Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
28446 Discussions

Undefined symbols for architecture i386

Brian_A_
Novice
900 Views

Need help resolving this

Running on Mac OS 10.12.2
IFC 2017 update 1
Compiling 32 bit code

Undefined symbols for architecture i386:
  "_cylin2_", referenced from:
      _sbntac_ in scdapo.a(sbntac.o)
  "_effht2_", referenced from:
      _slabc_ in scdapo.a(slabc.o)
  "_effhtsh2_", referenced from:
      _slabc_ in scdapo.a(slabc.o)
  "_gaphtc2_", referenced from:
      _effht_ in scdapo.a(effht.o)
      _effhts_ in scdapo.a(effhts.o)
      _effhtsh_ in scdapo.a(effhtsh.o)
  "_ielecr_", referenced from:
      _iscdap_ in scdapo.a(iscdap.o)
  "_rnodesi_", referenced from:
      _rfuel_ in scdapo.a(rfuel.o)
  "_wolfhn2_", referenced from:
      _nheat_ in scdapo.a(nheat.o)
ld: symbol(s) not found for architecture i386

0 Kudos
5 Replies
mecej4
Honored Contributor III
900 Views

Not enough information has been provided to enable answering the question.

Similar issues may exist as in your previous threads; for example: https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/557120 and https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/270190 .

The indications are that you are mixing 32- and 64-bit objects and libraries. A clean and rebuild of the entire project, including the user libraries, with 32-bit target set for all projects, may solve the problem.

0 Kudos
Brian_A_
Novice
900 Views

I have done a clean and rebuild.  Same problem.

Here is what it says when it starts compiling
Intel(R) Fortran Intel(R) 64 Compiler for applications running on IA-32, Version 17.0.1.126 Build 20161013
Copyright (C) 1985-2016 Intel Corporation.  All rights reserved.

As far as I can tell I am compiling in 32 bit.

This program that I am compiling has three different versions.  I am able to compile and run the newest version that was programed in Fortran 90.
This version that I am trying to compile is written in Fortran 77.  Could it be that IFC 2017 is not compatible with the Fortran 77 version of my code? 

0 Kudos
mecej4
Honored Contributor III
900 Views

As far as the compiler is concerned, there is no difference between Fortran-77 and Fortran 9x, etc., unless you explicitly specify a /stand: option. You can have all the features available in Fortran 2003 in a *.f (or *.for) source file, and you can have only Fortran 77 features in a *.f90 source file. The distinction between files with a suffix of .f90 and files with suffixes of .f or .f90 is not in the language vintage supported, but source code format. With very few exceptions, any valid F77 code is also valid in F90, F2003, etc.

The only recent change in the IFort compiler(s) that I am aware of is that on Windows the compiler driver is now a 64-bit PE32+ EXE, whereas they used a 32-bit PE32 EXE in previous editions. That, however, should not matter as long as you have specified the target architecture as IA32, by setting the current target as IA32 in the makefile, or by using the -m32 option.

You can find whether an object file is 32-bit or 64-bit by using file on the object file and looking at the first line in the section FILE HEADER VALUES.

0 Kudos
Brian_A_
Novice
900 Views

I checked the headers

Archive : scdap/scdapo.a
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC    I386        ALL  0x00      OBJECT     3        432 SUBSECTIONS_VIA_SYMBOLS

 

 

They are all i386

0 Kudos
Kevin_D_Intel
Employee
900 Views

It does not seem like the issue relates to an invalid mix of architectures or a compiler fault but rather a case of the routines not existing, so perhaps they were not compiled or they reside in a location not included in the link.

Have you looked upstream in the build output to determine whether the source file(s) containing those subprograms actually compiled when building the Fortran 77 version of the app?

Perhaps try locating where those missing subprograms exist in the Fortran 90 working version of the app and then investigate whether they should exist in the same place in Fortran 77 version.

0 Kudos
Reply