Der Versuch, die Bibliothek eines Drittanbieters, libmagic, zu verwenden / include / compilieren. C / C ++ - Dateityperkennung

Nachdem ich nach einer Möglichkeit gesucht hatte, den Dateityp eines Dateistreams zu ermitteln, stellte ich fest, dass UnixDateibefehl Ich benutze libmagic und versuche, die Bibliothek selbst zu benutzen, kann sie aber nicht zum Laufen bringen. Ich habe selten Code von Drittanbietern in meinen eigenen integriert, daher ist das wahrscheinlich auch ein großer Teil meines Problems.

Warum:

Ich mache das, weil ich eine tragbare GUI-Bildbetrachtungs-App habe, die Archivdateitypen (rar, zip, more?) Anhand des angegebenen Dateinamens und der darin enthaltenen Bilddateitypen erkennen muss. Ich hoffe, dass ich libmagic für Windows und Linux (und Mac) verwenden kann. Wenn dies nicht der Fall ist, halte mich jetzt b / c auf, ich muss etwas anderes finden.

Versuch:

ich fandjemand, der etwas Ähnliches tut, aber ich kann nicht verfolgen, was sie tun, und ich habe keine Ahnung, wie überhaupt etwas kompiliert / ausgeführt wird, um herumzuspielen.

Mein erster Instinkt war, etwas zu tun wie:

// fileTypeTest.cpp, placed in file-5.03/src/ (source from link above)
#include <stdio.h>
#include "magic.h"
int main() {
  magic_t myt = magic_open(MAGIC_CONTINUE|MAGIC_ERROR/*|MAGIC_DEBUG*/|MAGIC_MIME);
  magic_load(myt,NULL);
  printf("magic output: '%s'\n",magic_file(myt,__FILE__));
  magic_close(myt);

  return 0;
}

dann kompiliere mit etwas wie:

$ gcc magic.c -o magic.o
$ g++ fileTypeTest.cpp -o fileTypeTest magic.o

was (offensichtlich?) nicht funktioniert. Ich weiß nicht einmal, wo ich anfangen soll, welche Fragen ich stellen soll oder ob dies die richtige Richtung ist, um mein ursprüngliches Problem überhaupt zu lösen.

Edit: Jetzt habe ich

#include    <stdio.h>
#include    <magic.h>

int main(int argc, char* argv[]) {
  if (argc != 2) {
    printf("bad arguments");
    return 0;
  }
  magic_t myt = magic_open(MAGIC_CONTINUE|MAGIC_ERROR/*|MAGIC_DEBUG*/|MAGIC_MIME);
  magic_load(myt,NULL);
  printf("magic output: '%s'\n", magic_file(myt, argv[1]));
  magic_close(myt);

  return 0;
}

Kompilieren mit:

$ g++ -L/usr/lib -libmagic fileTypeTest.cpp -o fileTypeTest

funktioniert. Ich musste allerdings auf synaptic gehen und libmagic-dev installieren. Ich muss testen, ob ich /usr/lib/libmagic.a in mein Quellverzeichnis kopieren kann, wenn ich meine App unter Windows MingW kompiliere, aber das wird vermutlich später für eine andere Frage sein.