Pregunta

Estoy tratando de construir un agente JVMTI usando el comando g ++ en Snow Leopard y aparece el siguiente error:

$ 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

Soy un novato en lo que respecta a la programación de gcc y C ++, así que no tengo idea de qué significa ese error. El agente en sí es extremadamente básico:

      #include 
      #include 

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

Cualquier ayuda con el mensaje sería muy apreciada.

¿Fue útil?

Solución

Las opciones de línea de comando que ha proporcionado a g ++ le indican que está intentando crear un archivo ejecutable, no una biblioteca compartida. g ++ se queja de que no ha definido una función main , ya que cada ejecutable requiere una.

Compile su biblioteca compartida con el indicador -c para que g ++ sepa construir una biblioteca, es decir, compile y ensamble su código, pero no intente vincularlo en un archivo ejecutable.

g++ -c -o agent.so -I `/usr/libexec/java_home`/include agent.cpp
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top