Question

J'essaie de créer un agent JVMTI à l'aide de la commande g ++ sur Snow Leopard et j'obtiens le message d'erreur suivant:

$ 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 ++, je n'ai donc 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.

Était-ce utile?

La solution

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

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top