Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
26730 Discussions

Undefined symbols for architecture i386


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
Black Belt

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

Similar issues may exist as in your previous threads; for example: and .

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.


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 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? 

Black Belt

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.


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


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.