Compilación del agente JVMTI (usando GCC, en OSX Snow Leopard)
-
07-07-2019 - |
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.
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