Thanks for your questions!
The C SDK doesn’t provide any built-in profiling capabilities. Instead, you monitor your application by creating transactions and segments using the C SDK API. This requires both that the C SDK be linked into your application (either via static or dynamic linking) and that you add the appropriate function calls as required.
We haven’t tested the JNI case specifically, but I can’t think of any particular reason it wouldn’t work. (Bonus: if you use the Java agent to monitor your JVM app, you could also use distributed tracing to link the transactions created by the Java agent and C SDK together, provided you can pass a payload string from the caller to the callee.)