Node:OBJ and LIB,
Previous:ASM and C,
.libcode with DJGPP
Q: I have a set of useful functions in a
.obj format, but no
source code. Can I use them with my DJGPP program?
Q: I have this
ACMELUXE.LIB library of functions which I
want to use. I've extracted all the
.obj files, but when I try to
link them with my program, GCC complains: "File format not recognized".
Can't I use these object files?
Q: I've got a bunch of
.obj files I want to use. I've ran
AR to make a GCC-style
.a object library, but got an error message
from GCC saying "couldn't read symbols: No symbols". How can I link
them with my code?
A: Sorry, you probably can't. The GNU linker called by GCC doesn't
understand the format of
.obj files which other DOS-based
compilers/assemblers emit. Unless you can get the source of those
functions, convert it to protected-mode, flat-address model code and
compile them with GCC, you most probably won't be able to use
However, if you are really desperate, one conversion tool you might try
OBJ2BFD. It was written by Robert Hoehne based on the
EMXAOUT utility from the
OBJ2BFD requires the
to be written for the flat-address memory model and will reportedly
complain if you feed it with code written for segmented memory models.
OBJ2BFD is available from the DJGPP sites.
Another automated conversion tool called
OBJ2COFF was written
by the SPiRiT team, and it can be used to convert
.lib libraries to
COFF format, provided that the
.obj files have been written for flat-address memory
OBJ2COFF is available via anonymous FTP transfer from the Oulu MSDOS repository. If you have
any problems with it or questions about it, send them to its author Rico or to George van Venrooij. Note that the authors of
explicitly prohibited commercial use, so you shouldn't use
OBJ2COFF for converting commercial object files.
You can also try using LIB32 librarian from Microsoft C8 to convert object files to COFF.
The main problem with these conversion methods is, of course, that most object files you'd want to converted were written for real-mode programs in memory models other than flat, and without extensive modifications would crash your program anyway.... (See previous question.)