Tentando usar / incluir / compilar biblioteca de terceiros, libmagic. Detecção de tipo de arquivo C / C ++
Depois de procurar uma maneira de detectar o tipo de arquivo de um fluxo de arquivos, descobri que o Unixcomando de arquivo usa libmagic e estou tentando fazer uso da biblioteca, mas não consigo fazê-la funcionar. Raramente eu integrei o código de terceiros em meu próprio país, de modo que provavelmente também é uma grande parte do meu problema.
Por quê:
Estou fazendo isso porque tenho um aplicativo de visualização de imagem de GUI portátil que precisará detectar os tipos de arquivo (rar, zip, mais?) De um determinado nome de arquivo e, em seguida, os tipos de arquivo de imagem dentro. Espero poder usar a libmagic para Windows e Linux (e Mac), por isso, se não for esse o caso, pare-me agora porque preciso encontrar outra coisa.
Tentativa:
eu encontreialguém fazendo algo semelhante, mas não consigo acompanhar o que eles estão fazendo e não faço ideia de como compilar / executar alguma coisa para começar a mexer.
Meu primeiro instinto foi fazer algo como:
// 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;
}
então compile com algo como:
$ gcc magic.c -o magic.o
$ g++ fileTypeTest.cpp -o fileTypeTest magic.o
que (obviamente?) não funciona. Eu nem sei por onde começar a procurar, que perguntas fazer ou se esta é a direção certa a seguir para resolver meu problema original.
Edit: Agora eu tenho
#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;
}
compilando com:
$ g++ -L/usr/lib -libmagic fileTypeTest.cpp -o fileTypeTest
trabalho. Eu tive que ir ao synaptic e instalar o libmagic-dev. Vou ter que testar para ver se consigo copiar /usr/lib/libmagic.a no meu diretório de origem ao compilar meu aplicativo no MingW do Windows, mas isso será para outra pergunta mais tarde, suponho.