Sathish
Sathish

Reputation: 11

Compiling with Mingw

I have a bunch of C files and header files in the folder. When I compile the C files with MinGW compiler, it shows that there is no such file or directory. But I have all the files in the same folder. How do I get them to compile?

I have attached the code for your reference (file computil.c):

#include <stdio.h>
#include <computil.h>
#include <dataio.h>

int getc_skip_marker_segment(const unsigned short marker, unsigned char **cbufptr, unsigned char *ebufptr)
{
  int ret;
  unsigned short length;

  ret = getc_ushort(&length, cbufptr, ebufptr);
  if(ret)return(ret);
  length -= 2;
  if(((*cbufptr)+length) >= ebufptr)
  {
    fprintf(stderr, "ERROR : getc_skip_marker_segment : ");
    fprintf(stderr, "unexpected end of buffer when parsing ");
    fprintf(stderr, "marker %d segment of length %d\n", marker, length);
    return(-2); }(*cbufptr) += length; return(0);
  }
}

I am compiling it with gcc -c computil.c.

Upvotes: 0

Views: 425

Answers (2)

Lundin
Lundin

Reputation: 213832

To put it simple, #include <header.h> means "search in the compiler's own library directories, while #include "header.h means "search in the same directory as the .c file that made the #include".

I don't believe gcc has any library headers named computil.h and dataio.h, so the code won't compile.

Upvotes: 0

Mike Housky
Mike Housky

Reputation: 4069

I believe you are going to have to add the current directory to the list of "standard places" that gcc uses. When you use instead of "computil.h", a Unix-style compiler won't look in the current directory.

For a quick fix to that, add -I. to the gcc command line. (dash, capital eye, period): gcc -I. computil.c

If that's an application include file intended to be found where the source files are found, then you should change the include line to: #include "computil.h"

That's one of the valuable nuances from Classic C that got lost in the ANSI standardization process. Standard C lets the compiler decide if there's a difference or between <> bracketed and "" quoted headers. It makes a difference in Unix and GNU ("GNU's Not Unix!"), well, pretty much is Unix only better in places.

Upvotes: 1

Related Questions