This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

GNU makefile --- Linker error

I'm trying to start using the GNU make utility (http://www.gnu.org/software/make/make.html) to build my C167 projects (there is a Win32 executable already built and available for download on another site, and the doc's are great). I copied the assembler, compiler and linker strings right out of the project otpions on the KEIL IDE and pasted them into the appropriate places in my makefile.

If I do a build all via the KEIL IDE, my project builds with zero errors and zero warnings, and I get a HEX file that I can load into my target and run.

However, if I delete the object files and run the make utility, the ASM files assemble with zero errors and zero warnings, the C files compile with zero errors and zero warnings, however the linker aborts with this error:

*** FATAL ERROR 220: INVALID INPUT MODULE
MODULE: C:\KEIL\C166\LIB\C167HL.LIB <----->

FWIW, I am using the HLARGE memory model, so it looks like the compiler & assembler did get the model correctly from the text I copied from the control strings via the project options dialog box. The memory model is not mentioned in the linker control strings.

I redirected the output of the make utility to a text file and then closely examined what was sent to the linker on the command line (via the make utility), and it looks exactly like the linker control string in the project options dialog box's linker control string window.

Anybody have a clue as to why I might be getting this error message from the linker?

Confused...
Dave.

Parents
  • Just a thought...

    Presumably, you compile your assembly and C source files individually (i.e., one source file per compiler invocation). When you link, are you trying to specifiy all the object files on the command line? If so, you could be exceeding the allowable command line length. To get around the command line length restriction I have my makefiles generate a linker command input file, then invoke the linker using the '@' option. This is for the C51 tools, mind you, but it's probably similar for the other toolchains.

Reply
  • Just a thought...

    Presumably, you compile your assembly and C source files individually (i.e., one source file per compiler invocation). When you link, are you trying to specifiy all the object files on the command line? If so, you could be exceeding the allowable command line length. To get around the command line length restriction I have my makefiles generate a linker command input file, then invoke the linker using the '@' option. This is for the C51 tools, mind you, but it's probably similar for the other toolchains.

Children