1

Snow Leopard で g++ コマンドを使用して JVMTI エージェントを構築しようとすると、次のエラーが発生します。

$ g++ -o agent.so -I `/usr/libexec/java_home`/include agent.cpp

未定義のシンボル: "_main"、参照元: crt1.10.6.o ld で開始:
シンボルが見つかりません collect2: ld が 1 つの終了ステータスを返しました

私は gcc と C++ プログラミングに関してはまったくの初心者なので、そのエラーが何を意味するのかわかりません。エージェント自体は非常に基本的なものです。

      #含む
      #含む

      JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
      {
          std::cout <<"読み込み中..." <<std::endl;
          JNI_OK を返します。
      }

メッセージの助けをいただければ幸いです。

4

1 に答える 1

3

g++ に指定したコマンド ライン オプションは、共有ライブラリではなく、実行可能ファイルをビルドしようとしていることを示しています。g++ はmain、すべての実行可能ファイルに関数が必要なため、関数を定義していないと不平を言っています。

-c フラグを付けて共有ライブラリをコンパイルし、g++ がライブラリを構築することを認識できるようにします。つまり、コードをコンパイルしてアセンブルしますが、実行可能ファイルにリンクしようとしないでください。

g++ -c -o agent.so -I `/usr/libexec/java_home`/include agent.cpp
于 2009-09-14T10:44:56.250 に答える