Domanda

Sto cercando di creare un agente JVMTI usando il comando g ++ su Snow Leopard e ottengo il seguente errore:

$ g++ -o agent.so -I `/usr/libexec/java_home`/include agent.cpp

Undefined symbols: "_main", referenced from: start in crt1.10.6.o ld:
symbol(s) not found collect2: ld returned 1 exit status

Sono un principiante assoluto quando si tratta di programmazione gcc e C ++, quindi non ho idea di cosa significhi quell'errore. L'agente stesso è estremamente semplice:

      #include 
      #include 

      JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
      {
          std::cout <<"Loading aspect..." <<std::endl;
          return JNI_OK;
      }

Qualsiasi aiuto con il messaggio sarebbe molto apprezzato.

È stato utile?

Soluzione

Le opzioni della riga di comando fornite a g ++ indicano che stai tentando di creare un eseguibile, non una libreria condivisa. g ++ si lamenta di non aver definito una funzione main , poiché ogni eseguibile ne richiede una.

Compila la tua libreria condivisa con il flag -c in modo che g ++ sappia costruire una libreria, ovvero compila e assembla il tuo codice, ma non provare a collegarlo in un file eseguibile.

g++ -c -o agent.so -I `/usr/libexec/java_home`/include agent.cpp
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top