title: Unresolved external symbol using GNU library (getopt) on Microsoft Visual Studio 2013 C++
body: <p>I don't have that much experience programming. What I'm trying to do is implement getopt in my program so that I can run it using arguments.</p>
  
  <p>I have included getopt.h, getopt_long.c and all necessary libraries. </p>
  
  <p>I get the errors LNK2001: unresolved external symbol opterr, optarg, optind, optopt.</p>
  
  <p>I know I haven't given much information about the problem, but I don't really know what more to add. The files are working for other people, so assume there is nothing wrong with them.</p>
  
  <p>What is likely the problem here?</p>
  
  <p>Edit: Here is the code, although this is probably not where the problem is</p>
  
  <pre><code>/* Flag set by ‘--verbose’. */
  static int verbose_flag;
  
  int
  main(int argc, char **argv)
  {
      int c;
  
      while (1)
      {
              static struct option long_options[] =
              {
                      /* These options set a flag. */
                      { "verbose", no_argument, &amp;verbose_flag, 1 },
                      { "brief", no_argument, &amp;verbose_flag, 0 },
                      /* These options don't set a flag.
                      We distinguish them by their indices. */
                      { "add", no_argument, 0, 'a' },
                      { "append", no_argument, 0, 'b' },
                      { "delete", required_argument, 0, 'd' },
                      { "create", required_argument, 0, 'c' },
                      { "file", required_argument, 0, 'f' },
                      { 0, 0, 0, 0 }
              };
              /* getopt_long stores the option index here. */
              int option_index = 0;
  
              c = getopt_long(argc, argv, "abc:d:f:",
                      long_options, &amp;option_index);
  
              /* Detect the end of the options. */
              if (c == -1)
                      break;
  
              switch (c)
              {
              case 0:
                      /* If this option set a flag, do nothing else now. */
                      if (long_options[option_index].flag != 0)
                              break;
                      printf("option %s", long_options[option_index].name);
                      if (optarg)
                              printf(" with arg %s", optarg);
                      printf("\n");
                      break;
  
              case 'a':
                      puts("option -a\n");
                      break;
  
              case 'b':
                      puts("option -b\n");
                      break;
  
              case 'c':
                      printf("option -c with value `%s'\n", optarg);
                      break;
  
              case 'd':
                      printf("option -d with value `%s'\n", optarg);
                      break;
  
              case 'f':
                      printf("option -f with value `%s'\n", optarg);
                      break;
  
              case '?':
                      /* getopt_long already printed an error message. */
                      break;
  
              default:
                      abort();
              }
      }
  
      /* Instead of reporting ‘--verbose’
      and ‘--brief’ as they are encountered,
      we report the final status resulting from them. */
      if (verbose_flag)
              puts("verbose flag is set");
  
      /* Print any remaining command line arguments (not options). */
      if (optind &lt; argc)
      {
              printf("non-option ARGV-elements: ");
              while (optind &lt; argc)
                      printf("%s ", argv[optind++]);
              putchar('\n');
      }
  
      exit(0);
  }
  </code></pre>