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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top