Compilar agente JVMTI (usando GCC, no OSX neve leopardo)
-
07-07-2019 - |
Pergunta
Eu estou tentando construir um agente JVMTI usando o comando g ++ no Snow Leopard e eu recebo o seguinte erro:
$ 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
Eu sou um novato total, quando se trata de gcc e C ++ programação então eu não tenho idéia o que isso significa erro. O agente em si é extremamente básico:
#include #include JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) { std::cout <<"Loading aspect..." <<std::endl; return JNI_OK; }
Qualquer ajuda com a mensagem seria muito apreciada.
Solução
As opções de linha de comando que você fornecidos para g ++ está dizendo que você está tentando construir um executável, não uma biblioteca compartilhada. g ++ está reclamando que você não tenha definido uma função main
, como cada executável requer um.
Compilar sua biblioteca compartilhada com a opção -c para que g ++ sabe para construir uma biblioteca, ou seja, de compilação e montar o seu código, mas não tente ligá-lo em um arquivo executável.
g++ -c -o agent.so -I `/usr/libexec/java_home`/include agent.cpp