From havefunsoft wiki
Revision as of 10:57, 31 October 2017 by Skalogryz (talk | contribs) (Static Linking)
Jump to: navigation, search

Capstone Engine is an open source library for disassembly.

Compiling with Mingw

The default compilation doesn't work and fails with a linking error:

./arch/Sparc/SparcInstPrinter.o:SparcInstPrinter.c:(.text+0x4e0): multiple definition of `imaxabs'
./arch/PowerPC/PPCInstPrinter.o:PPCInstPrinter.c:(.text+0x16030): first defined here
collect2.exe: error: ld returned 1 exit status
make: *** [libcapstone.so] Error 1

(for whatever reason "imaxabs" is included in resulting files as a stand-alone function, rather than inline function)

The following command line should be used to compile the library on MinGW (with gcc installed)

CFLAGS="-llibmingwex" ./make.sh gcc

Adding libmingwex library for compilation prevents imaxabs to be inserted into .o file (because the function is implemented in mingwex)

Static Linking

Once the static library is built, it's possible to link it statically to the executable. However, there are certain dependencies that must be resolved first.

 {$linklib libcapstone} // library itself
 {$ifdef mswindows}
 {$linklib libmsvcrt}   // MS Visual C runtime (mingw bindings)
 {$linklib libgcc}      // C++ library

Such dependencies are pretty typical for mingw compilation.

See Also