compilation - Compiling libmagic statically (c/c++ file type detection) -
Thanks for those people who did me with my help (links for reference only).
I type fileTypeTest.cpp , libmagic.a , and magic in a file, and I G + + -lmagic fileTypeTest I can compile CPP FileType Test Later, I will test to see if it runs in compiled windows with Mingad.
I am planning to use it in a small GUI application, and I want to compile it for distribution consistently. My problem is that the libmagic external file, magic is required. (I'm actually using my small and compiled version, Magic_Short.MGC, but I want to revert.)
To codify the file in a Hummy solution file, create an external file ( And delete) as needed. How can I avoid it?
Added for clarity:
Magic is a text file that describes the properties of different file types. When called to identify a file, libmagic searches through magic . There is a compiled version, magic.mgc that works faster My application only needs to identify some types of file types before deciding what to do with those people, Code> magic_short to make the file magic_short.mgc .
It is difficult, I think you can do this ... by the way, I downloaded it Have a Libmagic source and see it ...
There is a function called magic_read_entries inside minifile.c (this is the pure vanilla source I have external file From where you have downloaded it.
You can attach the magic file (which is found in the / etc directory) at the end of the library code, such as it cat ADU> libmagic.a . In my system, magic is 474443 bytes, libmagic.a is 38588 bytes.
< In the code> magic.c file, you will need to change the magichandle_t * magic_init (unsigned flags) function at the end of the function, add line magic_read_entries and To draw data, modify the function to read on the offset of the library; keep it as a pointer for all four as a porter; ) And use it instead of reading from the file. Since you know where the library data to read offset, it should not be difficult.
Now the function magic_read_entries will no longer be used, because it is not going to be read any more from a file anymore. The function `magichandle_t * magic_init (unsigned flags) 'will take care of loading entries and you should be right there.
If you need more help then let me know,
Edit: I used the old 'libmagic' from Sourceforge.net and Here I have done this:
- The downloaded archive will be removed in my home directory, creating a folder called ungzipping / untarring archive libmagic .
- Create a folder within libmagic and test
- original magic and minifile.c In Test
- Using the attached fluff output to highlight the difference, apply it to Magic C source.
48a49,51> # MAGIC_DATA_OFFSET 0x971C> Define #define MAGIC_STAT_LIB_NAME "libmagic.a" & gt; 125a129,130 & gt; / * Magic_Red_entry is obsolete ... * /> Magic_reddy_editry (mh, magic_STAT_LIB_NAME); 251c256,262 & lt; --- & gt; & Gt; If (! Fseek (fp, MAGIC_DATA_OFFSET, SEEK_SET)) {& gt; If (ftell (fp)! = MAGIC_DATA_OFFSET) 0; & Gt; } Other {& gt; Return 0; & Gt; } & Gt; - Then create
- Magic file (which I copied from / etc, under Slackware Linux 12.2) The Libmagic.a file has been added, i.e.
cat magic & gt; & Gt; Libmagic.a. SHA checksum (4abf536f2ada050ce945fbba796564342d6c9a61 magic) for magic, here is the exact data for magic (-RR-R1 root root 474443 2007-06-03 00:52 / etc / file / magic) As my system - This difference is for the source minifile.c , apply it and make create executable by running again Re-create for
It should work then. If not, then you need to adjust the offset in the library to read and modify MAGIC_DATA_OFFSET. If you want, you can put the magic data file in the paste bin. let me know.
Hope it helps, Best wishes, Tom.
Comments
Post a Comment