2 Replies Latest reply: Jul 29, 2010 7:21 AM by 791266 RSS

    Getting started with JVMTI on Linux

      Hi All,

      I've been doing some JVMTI code for a while using windows, and I want to get that code working on Linux. The problem is that I can't seem to get even the simplest agent running on Linux. I can't figure out how to troubleshoot this, so any help would be appreciated. Here is my simple agent:
       * TestAgent.cpp
       *  Created on: Nov 30, 2009
       *      Author: delmyers
      #include <iostream>
      #include "TestAgent.hpp"
      JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {
           std::cout << "Agent loaded" << std::endl;
           return 0;
      JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm) {
           std::cout << "Agent Unloaded" << std::endl;
      As you can see, all it does is print the status of the load and unload operations. It compiles and links fine. Here are the commands for compile and link:

      g++ -I/usr/java/latest/include -I/usr/java/latest/include/linux -O0 -g3 -Wall -c -fmessage-length=0 -D_JNI_IMPLEMENTATION_ -DDEBUG -fno-omit-frame-pointer -m32 -MMD -MP -MF"src/TestAgent.d" -MT"src/TestAgent.d" -o"src/TestAgent.o" "../src/TestAgent.cpp"

      g++ -D_JNI_IMPLEMENTATION_ -fno-omit-frame-pointer -m32 -static-libgcc -shared -Wl,-soname=TestAgent -o"libLinuxAgentTest.so" ./src/TestAgent.o

      But when I try to run an application (a simple hello world, for example), the agent never seems to load or unload. The JVM doesn't complain or anything: it just doesn't load the agent. A simple example launch would look like:

      java -agentlib:LinuxAgentTest HelloWorld

      I'm getting the typical "Could not find agent library on the library path...." error. Any suggestions?