I don't think this is due to the IPP function, per se. Some searching on the web for SIGIOT reveals that you may have a bad pointer (perhaps the malloc didn't happen?). One source says this:
The IOT stands for "I/O Trap" but you should just think "bad pointer" and it is the same as segment violation (SEGV). If you really want, you can look in /usr/include/bits/signum.h . It is a little confusing in that a bad pointer can cause SIGIOT, SIGBUS, SIGSEGV but differences are for legacy reasons.
Unfortunately, it means that there is either a mismatch between the libraries resulting in memory corruption, or, more likely, something is not being initialized properly. It is hard to say what the problem might be. There may still be some other link option that you need, or something like that.
Memory allocation alignment problem? Stack problems? Check out this article, it might help: Determining Root Cause of SIGSEGV or SIGBUS errors