Próbuję użyć / include / compile biblioteki innych firm, libmagic. Wykrywanie typu pliku C / C ++
Po znalezieniu sposobu na wykrycie typu pliku strumienia plików, znalazłem system Unixpolecenie pliku używa libmagic i sam próbuję wykorzystać bibliotekę, ale nie mogę go uruchomić. Rzadko integrowałem kod innej firmy w moim własnym, więc to prawdopodobnie duża część mojego problemu.
Czemu:
Robię to, ponieważ mam przenośną aplikację do przeglądania obrazów gui, która będzie musiała wykrywać typy plików archiwalnych (rar, zip, więcej?) Z podanej nazwy pliku, a następnie typy plików obrazów wewnątrz. Mam nadzieję, że będę mógł używać libmagic na Windows i Linux (i Mac), więc jeśli tak nie jest, przestań mnie teraz b / c Muszę znaleźć coś innego.
Próba:
znalazłemktoś robi coś podobnego, ale nie mogę śledzić tego, co robią, i nie mam pojęcia, w jaki sposób kompilować / uruchamiać cokolwiek, żeby zacząć się bawić.
Moim pierwszym instynktem było zrobienie czegoś takiego:
// 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;
}
następnie skompiluj z czymś w rodzaju:
$ gcc magic.c -o magic.o
$ g++ fileTypeTest.cpp -o fileTypeTest magic.o
które (oczywiście?) nie działa. Nie wiem nawet, od czego zacząć, jakie pytania zadawać, czy też jest to właściwy kierunek, aby przede wszystkim rozwiązać mój pierwotny problem.
Edytuj: Teraz mam
#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;
}
kompilacja z:
$ g++ -L/usr/lib -libmagic fileTypeTest.cpp -o fileTypeTest
Prace. Musiałem jednak przejść do synaptic i zainstalować libmagic-dev. Będę musiał przetestować, czy mogę po prostu skopiować /usr/lib/libmagic.a do mojego katalogu źródłowego podczas kompilacji mojej aplikacji na MingW systemu Windows, ale przypuszczam, że to będzie kolejne pytanie.