2009-09-14 3 views
0

Je suis en train de construire un agent JVMTI en utilisant la g ++ commande sur Snow Leopard et je reçois l'erreur suivante:Agent Compiling JVMTI (en utilisant GCC, sur OSX Snow Leopard)

 
$ 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

Je suis un novice en matière de programmation gcc et C++, donc je n'ai aucune idée de ce que cette erreur signifie. L'agent lui-même est extrêmement basique:

 
     #include 
     #include 

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

Toute aide concernant le message serait grandement appréciée.

Répondre

3

Les options de ligne de commande que vous avez fournies à g ++ indiquent que vous essayez de créer un exécutable et non une bibliothèque partagée. g ++ se plaint que vous n'avez pas défini de fonction main, car chaque exécutable en nécessite un.

Compilez votre bibliothèque partagée avec l'indicateur -c afin que g ++ sache construire une bibliothèque, c'est-à-dire compiler et assembler votre code, mais n'essayez pas de le lier dans un fichier exécutable.

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

Excellent. Ça a marché! Merci beaucoup! – user66237