This discussion is archived
0 Replies Latest reply: Dec 5, 2013 3:43 AM by user12956197 RSS

Failed to load agent library

user12956197 Newbie
Currently Being Moderated

I wrote a simple agent in windows with mingw(by netbeans) but failed when using it in java test program

1. create a c++ dynamic library in netbeans

    my build tool is mingw. I add c:/Program Files/Java/jdk1.7.0_10/include  and c:/Program Files/Java/jdk1.7.0_10/include/win32 to c++ compiler Including Directories

   set Build->Linker->Additional Options to -mwindows


2. add Agent.cpp

#include <jvmti.h>

#include <string>

#include <cstring>

#include <iostream>

#include <list>

#include <map>

#include <set>

#include <stdlib.h>

#include <jni_md.h>


JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options,

  void *reserved) {

  jvmtiEnv *jvmti;

  jint result = jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_1);

  if (result != JNI_OK) {

  printf("ERROR: Unable to access JVMTI!\n");


  jvmtiError err = (jvmtiError) 0;

  jclass *classes;

  jint count;


  err = jvmti->GetLoadedClasses(&count, &classes);

  if (err) {

  printf("ERROR: JVMTI GetLoadedClasses failed!\n");


  for (int i = 0; i < count; i++) {

  char *sig;

  jvmti->GetClassSignature(classes[i], &sig, NULL);

  printf("cls sig=%s\n", sig);


  return err;



JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm) {

  // nothing to do



3. build it successfully

the build scripts:


"/usr/bin/make" -f nbproject/ QMAKE= SUBPROJECTS= .build-conf

make[1]: Entering directory `/c/Users/lili14/Documents/NetBeansProjects/JVMTIAgent'

"/usr/bin/make"  -f nbproject/ dist/Debug/MinGW_1-Windows/libJVMTIAgent.dll

make[2]: Entering directory `/c/Users/lili14/Documents/NetBeansProjects/JVMTIAgent'

mkdir -p build/Debug/MinGW_1-Windows

rm -f build/Debug/MinGW_1-Windows/Agent.o.d

g++.exe    -c -g -I../../../../../Program\ Files/Java/jdk1.7.0_10/include -I../../../../../Program\ Files/Java/jdk1.7.0_10/include/win32  -MMD -MP -MF build/Debug/MinGW_1-Windows/Agent.o.d -o build/Debug/MinGW_1-Windows/Agent.o Agent.cpp

mkdir -p dist/Debug/MinGW_1-Windows

g++.exe     -mwindows -shared -o dist/Debug/MinGW_1-Windows/libJVMTIAgent.dll build/Debug/MinGW_1-Windows/Agent.o 

make[2]: Leaving directory `/c/Users/lili14/Documents/NetBeansProjects/JVMTIAgent'

make[1]: Leaving directory `/c/Users/lili14/Documents/NetBeansProjects/JVMTIAgent'


4. create a test java program




public class TestAgentVMAttacher {



  public static void main(String[] args) throws Exception {

        String pid = "36132";

        String agentPath = "C:\\Users\\lili14\\Documents\\NetBeansProjects\\JVMTIAgent\\dist\\Debug\\MinGW_1-Windows\\libJVMTIAgent.dll";

        VirtualMachine virtualMachine =;

        virtualMachine.loadAgentPath(agentPath, null);








pid is set correctly to a running java program

but it throws exception:

Exception in thread "main" Failed to lo

ad agent library






  at test.TestAgentVMAttacher.main(


my environment:

win7(32bit) + oracle jdk 1.7.0 update 10


  • Correct Answers - 10 points
  • Helpful Answers - 5 points